Configurar un handle de libcurl para la resolución de nombres de host con SOCKS5
Use CURLPROXY_SOCKS5_HOSTNAME en el handle de transferencia para resolver el destino a través del proxy.
Dentro de la inicialización de libcurl existente de la aplicación y del ciclo de vida del 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 envía el nombre de host del destino por la ruta SOCKS. CURLPROXY_SOCKS5 en cambio lo resuelve en el cliente, que puede usar la vista DNS de otra red. Un cliente HTTP en C++ que usa libcurl no necesita su propio handshake SOCKS solo para elegir esta ruta. Para un punto de conexión público permitido, la lista de proxies SOCKS5 ofrece candidatos de host y puerto para reemplazar el oyente loopback ilustrativo.
El valor CURLOPT_NOPROXY vacío hace deliberada la prueba del proxy. Conserve las omisiones previstas al adaptarlo a la política normal de la aplicación. Estas opciones afectan a este handle; otras bibliotecas y sockets del proceso no las heredan.
Compruebe los valores de retorno de la configuración de opciones y de la transferencia mediante el manejo de errores de la aplicación. Un fallo al alcanzar o negociar con SOCKS puede producirse antes de cualquier respuesta HTTP, por lo que no proporciona un código de estado del sitio web.
Las credenciales de proxy necesarias usan la configuración de autenticación de proxy compatible y el mecanismo de secretos, por separado del inicio de sesión del sitio web. Mantenga activada la verificación TLS: abrir una conexión a través de SOCKS no establece la identidad del servicio HTTPS.