如何通过获取请求使用curl来获取站点的https响应?

问题描述 投票:0回答:1

我有执行此操作的代码,但为什么不起作用:

#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中还很陌生,我找不到足够的信息,那么您有何建议?

curl libcurl
1个回答
0
投票

我认为那是错误号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);

仍然是默认设置。

© www.soinside.com 2019 - 2024. All rights reserved.