我有执行此操作的代码,但为什么不起作用:
#include <stdio.h>
#include <stdlib.h>
#include <curl/curl.h>
int main()
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(curl, CURLOPT_URL, "https://curl.haxx.se/libcurl/c/url2file.html");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
struct curl_slist *headers = NULL;
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, stdout);
res = curl_easy_perform(curl);
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_easy_cleanup(curl);
return 0;
}
给出输出:
curl_easy_perform()失败:SSL对等证书或SSH远程密钥不正确
但是当我在cmd中执行'curl https://curl.haxx.se/libcurl/c/url2file.html'时,它将成功给出响应。
我从邮递员那里获得了这段代码,并做了一些编辑。我的目的是打印站点对标准输出的响应。
''Get'请求在Postman上运行良好,但是为什么在c中的libcurl上却不起作用。我怎么解决这个问题 ?我在libcurl中还很陌生,我找不到足够的信息,那么您有何建议?
我认为那是错误号60? (记录为here)
[这意味着libcurl所使用的CA证书无法从curl.haxx.se验证服务器证书-如果启用CURLOPT_VERBOSE
,则可以看到它使用的通往CA证书的路径。您可能必须将其指向特定路径。
您的代码还使用了许多多余的选项,可以删除:
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
这是默认值
curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
这仅在您指定不带方案的“ URL”时才有意思,而您没有!)>
struct curl_slist *headers = NULL; curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
这无效。
curl_easy_setopt(curl, CURLOPT_WRITEDATA, stdout);
仍然是默认设置。