Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 12.09.2015
Сообщений: 12
1

Curl + proxy: не работает рабочий прокси

11.03.2019, 22:16. Показов 2493. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Я пытаюсь сделать запрос на сайт через прокси. Вот мой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
 CURL *curl_handle;
    curl_handle = curl_easy_init();
    curl_easy_setopt(curl_handle, CURLOPT_URL, "www.ec-proton.ru");
    curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36");
    curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1);
    curl_easy_setopt(curl_handle, CURLOPT_PROXY, "1.10.189.41:49016");
    curl_easy_setopt(curl_handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
    curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data);
    curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, &content);
    curl_easy_setopt(curl_handle, CURLOPT_CONNECTTIMEOUT, 10L);//ожидание ответа от сайта 10 секунд максимум
    CURLcode res = curl_easy_perform(curl_handle);
В итоге получаю ошибку "Couldn't connect to the server". Хотя прокси рабочий, я проверял через браузер до и после ошибки в программе.

А когда я пытаюсь сделать запрос через работающий прокси типа https, получаю ошибку "Timeout was reached". Хотя через браузер страница загружается. Таймаут у меня стоит 10 секунд. Сайт - мой собственный. Если комментирую строки с заданием прокси, то запрос на сайт успешно выполняется. То есть дело в рабочем прокси...

Почему не получается послать успешно запрос через работающие прокси? в чем моя ошибка? Может быть я неверно скомпилировал curl? У меня вроде только статические библиотеки подключены в проекте. Может быть в этом проблема?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2019, 22:16
Ответы с готовыми решениями:

cURL не всегда работает прокси
Настройки такие curl_setopt ( $ch, CURLOPT_HEADER, 0 ); curl_setopt ( $ch,...

cURL + Proxy ?
Всем привет! Пытаюсь посылать cURL запросы через прокси, но что-то не выходит. Список Proxy беру...

curl с proxy
ДОбрый день, есть функция получения контента по curl, обычным способом работает нормально, но...

CURL PROXY + TOR
Доброго времени суток. В сети существуют vpn , dns позволяющие подключаться к tor сайтам через...

2
109 / 84 / 55
Регистрация: 01.02.2014
Сообщений: 281
12.03.2019, 06:33 2
У меня все работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
static size_t write_data(void *contents, size_t size, size_t nmemb, void *userp)
{
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}
 
int main()
{
    std::string content;
 
    CURL *curl_handle;
    curl_handle = curl_easy_init();
    curl_easy_setopt(curl_handle, CURLOPT_URL, "www.ec-proton.ru");
    curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36");
    curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1);
    curl_easy_setopt(curl_handle, CURLOPT_PROXY, "113.10.207.158:1080");
    curl_easy_setopt(curl_handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
    curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data);
    curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, &content);
    curl_easy_setopt(curl_handle, CURLOPT_CONNECTTIMEOUT, 5L);//ожидание ответа от сайта 10 секунд максимум
    CURLcode res = curl_easy_perform(curl_handle);
    
    if (res == CURLE_OK) {
        std::cout << content;
    }
    else {
        std::cout << "Error";
    }
 
    std::cin.get();
}
Попробуйте убрать у себя
C++
1
    curl_easy_setopt(curl_handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
возможно ваш прокси не поддерживает SOCKS5
0
1 / 1 / 0
Регистрация: 12.09.2015
Сообщений: 12
12.03.2019, 22:47  [ТС] 3
Я понял свою ошибку! Все дело было в этой строчке:
C++
1
curl_easy_setopt(curl_handle, CURLOPT_CONNECTTIMEOUT, 10L);
Я задавал слишком маленький тайм-аут. Как ни прискорбно, но многие прокси очень медленные... и у курла просто времени не хватало, чтобы выполнить запрос... Мне писалась в основном ошибка Timeout was reached. Ну или изредка Couldn't connect to the server.
Timeout was reached - это значит медленный прокси.
Couldn't connect to the server - это значит был сбой в работе прокси... в следующем запросе прокси может сконнектиться с сервером)
Я убрал приведенную выше строчку, и все заработало. Правда ответа от сервера я ждал по 10-20 секунд(
0
12.03.2019, 22:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2019, 22:47
Помогаю со студенческими работами здесь

Curl->Proxy->phpQuery
Написал класс &quot;обёртку&quot; для мульти курла, естественно запросы гоняю через прокси, все отлично. На...

Библиотеки для многопоточной работы с CURL и Proxy
Всем доброго времени суток! Господа, посоветуйте библиотеку с нормально реализованной...

Обратный прокси (Reverse Proxy) на OpenServer
Доброго времени суток! Кто0нибудь настраивал обратный прокси на OpenServer? Поделитесь опытом,...

Загрузка страниц через корпоративный прокси (Proxy)
Добрый день! Мучаюсь уже несколько дней, и никак не могу выйти в просторы интернета в свой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru