функция curl_easy_perform() libcurl не возвращает html с веб-сайта

#c #curl #libcurl

#c #curl #libcurl

Вопрос:

Попытка просто получить html-данные с веб-сайта с помощью библиотеки libcurl, но curl_easy_perform() не возвращает данные. Я использую тот же код из этого видео: https://www.youtube.com/watch?v=Uha3JGPRIQs .

 #include <iostream>
#include <curl/curl.h>
using namespace std;
 
int main(void)
{
  CURL *curl;                           // Handle to a transfer
  CURLcode res;
  curl_global_init(CURL_GLOBAL_ALL);    // initialization
  
  curl = curl_easy_init();
  if (curl)
  {
    curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
    res = curl_easy_perform(curl);
    
    if (res != CURLE_OK)
        cout << "ERROR";
        
    curl_easy_cleanup(curl);
  }
  
  curl_global_cleanup();
  return 0;
}
 

Этот код выводит «ОШИБКУ» из этой строки: if (res != CURLE_OK). Если кто-нибудь может помочь мне понять, почему он это делает, я был бы очень признателен, спасибо.

Комментарии:

1. Каково фактическое значение res ? Это скажет вам, ПОЧЕМУ curl_easy_perform() происходит сбой. Вы уже прочитали документацию ? » CURLE_OK (0) означает, что все было в порядке, ненулевое значение означает, что произошла ошибка , как <curl/curl.h> определено — см. libcurl-ошибки . Если CURLOPT_ERRORBUFFER было установлено значение с curl_easy_setopt , в буфере ошибок при возврате ненулевого значения будет отображаться читаемое сообщение об ошибке «.

2. То, что часто приводит к сбою, заключается в том, что сайты перенаправляют страницы на другие страницы, и в этом случае вам нужно CURLOPT_FOLLOWLOCATION . В некоторых случаях вы можете находиться за прокси-сервером, и в этом случае вам также может понадобиться CURLOPT_HTTPPROXYTUNNEL . Вы также можете сделать вывод немного более подробным, чтобы вы могли следить за тем, что он делает, установив CURLOPT_VERBOSE

3. @TedLyngmo спасибо, я думаю, что многие сайты не работают с этой программой. Проблема в том, что example.com URL-адрес не содержит https, поэтому я избавился от этого, и теперь он работает.

4. @PatrickAliberti О, здорово 🙂