Внутри существующей инициализации libcurl приложения и жизненного цикла easy-handle:

curl_easy_setopt(handle, CURLOPT_URL, "https://example.com/");
curl_easy_setopt(handle, CURLOPT_PROXY, "127.0.0.1:1080");
curl_easy_setopt(handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
curl_easy_setopt(handle, CURLOPT_NOPROXY, "");
curl_easy_setopt(handle, CURLOPT_CONNECTTIMEOUT, 5L);
curl_easy_setopt(handle, CURLOPT_TIMEOUT, 15L);

CURLPROXY_SOCKS5_HOSTNAME передаёт имя хоста назначения по пути SOCKS. CURLPROXY_SOCKS5 вместо этого разрешает его на клиенте, который может использовать DNS-представление другой сети. HTTP-клиенту на C++ с libcurl не нужен собственный SOCKS-рукопожатие только для выбора этого маршрута. Для разрешённой публичной конечной точки список SOCKS5-прокси предлагает кандидатов хоста и порта для замены иллюстративного loopback-слушателя.

Пустое CURLOPT_NOPROXY значение делает тест прокси намеренным. Сохраняйте предусмотренные обходы при адаптации к обычной политике приложения. Эти параметры влияют на данный дескриптор; другие библиотеки и сокеты в процессе их не наследуют.

Проверяйте возвращаемые значения установки параметров и передачи через обработку ошибок приложения. Сбой при достижении SOCKS или согласовании с ним может произойти до любого HTTP-ответа, поэтому он не даёт код состояния веб-сайта.

Требуемые учётные данные прокси используют поддерживаемые параметры аутентификации прокси и механизм секретов отдельно от входа на веб-сайт. Оставляйте проверку TLS включённой: открытие соединения через SOCKS не устанавливает подлинность службы HTTPS.

Похожие статьи