Libcurl: не удалось подключиться к www.google.fr Отказано в соединении - PullRequest
0 голосов
/ 17 апреля 2019

Я использую curl-7.64.1 (https://curl.haxx.se/windows/) 32 бит, с OpenSSL 1.1.1b (32 бит) и tidy-5.0.0 для разбора XML.

Когда я дома, все соединения работают нормально, но когда я в школе, подключаюсь к Wi-Fi этого. Все соединения отклонены.

Я попытался установить соединение с https://www.google.fr/, и с помощью CURLOPT_VERBOSE я получаю на экране сообщение:

  • Попытка 172.217.18.227 ...
  • TCP_NODELAY установлено
  • Не удалось подключиться к порту 173 172.217.18.227: соединение отклонено
  • Не удалось подключиться к порту www.google.fr 443: соединение отклонено
  • Закрытие соединения 0 Не удалось подключиться к порту www.google.fr 443: соединение отклонено

Сначала я попытался изменить порт на 8080. Я написал https://www.google.fr:8080 как URL для libCurl. Но все же есть: Не удалось подключиться к порту 8080 www.google.fr: соединение отклонено

После того, как я попытался настроить прокси в соединении LibCurl. Но это ничего не изменило.

 CURL *curl;
 char curl_errbuf[CURL_ERROR_SIZE];
 TidyDoc tdoc;
 TidyBuffer docbuf = {0};
 TidyBuffer tidy_errbuf = {0};
 int err;

 curl = curl_easy_init();
 curl_easy_setopt(curl, CURLOPT_URL, "https://www.google.fr:8080");
 curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, curl_errbuf);
 //curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
 curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_cb);

 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);

 tdoc = tidyCreate();
 tidyOptSetBool(tdoc, TidyForceOutput, yes);
 tidyOptSetInt(tdoc, TidyWrapLen, 4096);
 tidySetErrorBuffer(tdoc, &tidy_errbuf);
 tidyBufInit(&docbuf);

 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &docbuf);

 curl_easy_setopt(curl, CURLOPT_PROXY, "http://212.129.52.155:8080");

 err = curl_easy_perform(curl);

Я бы хотел, чтобы соединение работало по Wi-Fi моей школы.

РЕДАКТИРОВАТЬ 1:

Следуя советам в этом посте: Могут ли серверы блокировать запросы керлинга?

Я извлек заголовки из Chrome и добавил их в LibCurl.

struct curl_slist *list = NULL;

list = curl_slist_append(list, "accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
list = curl_slist_append(list, "accept-encoding: gzip, deflate, br");
list = curl_slist_append(list, "accept-language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7");
list = curl_slist_append(list, "cache-control: max-age=0");
list = curl_slist_append(list, "upgrade-insecure-requests: 1");

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);

Я включаю настройки UserAgent:

curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36");

И я добавил печенье:

curl_easy_setopt(curl, CURLOPT_COOKIESESSION, 1L);
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt");

Но после всего этого соединение все равно не удалось.

1 Ответ

1 голос
/ 17 апреля 2019

Если с вашим подключением все в порядке, эта ошибка, вероятно, связана с прокси-сервером: использует ли ваша школа прокси-сервер?

Если это так, вам нужно явно указать curl, чтобы сделать этот запрос через прокси-сервер.Это можно сделать с помощью

curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy:80");

Более подробную информацию о прокси можно найти здесь: https://curl.haxx.se/libcurl/c/CURLOPT_PROXY.html

В качестве альтернативы, вы можете попробовать использовать это в командной строке сcurl -x http://proxy_server:proxy_port --proxy-user username:password -L http://url

...