【问题标题】:How can I get https response of a site using curl in via get request?如何通过获取请求使用 curl in 获取站点的 https 响应?
【发布时间】:2020-01-25 18:57:53
【问题描述】:

我有一个代码来执行它,但为什么它不起作用:

#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' 时,它会成功给出响应。

我从 Postman 那里得到了这段代码,只是稍微编辑了一下。 我的目的是将站点的响应打印到标准输出。

'Get' 请求在 Postman 上运行良好,但为什么它不能在 c 中的 libcurl 上运行。 我怎么解决这个问题 ? 我是 libcurl 的新手,我找不到足够好的信息,所以你有什么建议?

【问题讨论】:

    标签: curl libcurl


    【解决方案1】:

    我猜这是错误号 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");
    

    只有当您指定“URLs”时才有意义,而您没有使用方案!

    struct curl_slist *headers = NULL;
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
    

    这没有效果。

    curl_easy_setopt(curl, CURLOPT_WRITEDATA, stdout);
    

    这是默认设置。

    【讨论】:

      猜你喜欢
      • 2018-04-27
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-07
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      相关资源
      最近更新 更多