Dentro da inicialização libcurl existente da aplicação e do ciclo de vida do 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 envia o nome de host do destino pelo caminho SOCKS. CURLPROXY_SOCKS5 em vez disso, resolve-o no cliente, que pode usar a visão DNS de outra rede. Um cliente HTTP em C++ que usa libcurl não precisa do seu próprio handshake SOCKS apenas para escolher esta rota. Para um endpoint público permitido, a lista de proxies SOCKS5 oferece candidatos de host e porta para substituir o listener loopback ilustrativo.

O valor CURLOPT_NOPROXY vazio torna o teste do proxy deliberado. Preserve os desvios pretendidos ao adaptá-lo à política normal da aplicação. Estas opções afetam este handle; outras bibliotecas e sockets no processo não as herdam.

Verifique os valores de retorno da configuração de opções e da transferência através do tratamento de erros da aplicação. Uma falha ao alcançar ou negociar com o SOCKS pode ocorrer antes de qualquer resposta HTTP, portanto não fornece um código de estado do site.

As credenciais de proxy necessárias usam as configurações de autenticação de proxy suportadas e o mecanismo de segredos, separadamente do login do site. Mantenha a verificação TLS ativada: abrir uma conexão através do SOCKS não estabelece a identidade do serviço HTTPS.

Artigos relacionados