Как я могу получить https ответ сайта, используя curl in get get request? - PullRequest
0 голосов
/ 25 января 2020

Я получил код для выполнения этого, но почему он не работает:

#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-партнера или S SH удаленный ключ не был в порядке

, но когда я выполняю 'curl https://curl.haxx.se/libcurl/c/url2file.html' в cmd, он успешно выдает ответ.

Я получил это Код от Почтальона и немного отредактировал. Моей целью было распечатать ответ сайта на стандартный вывод.

Запрос 'Get' хорошо работает на Postman, но почему он не работает на libcurl в c. Как я могу решить эту проблему ? Я довольно новичок в libcurl и не могу найти достаточно хорошей информации об этом, так что вы предлагаете?

1 Ответ

0 голосов
/ 27 января 2020

Полагаю, это ошибка № 60? (Задокументировано здесь )

Это означает, что используемый CA сертификат libcurl не смог проверить сертификат сервера из curl.haxx.se - если вы включите CURLOPT_VERBOSE, вы сможете увидеть, по какому пути это происходит. использует для сертификации CA. Возможно, вам придется указать ему указанный c путь.

Ваш код также использует много лишних опций, которые вы можете удалить:

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);

Это значение по умолчанию в любом случае.

...