애플리케이션의 기존 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 뷰를 사용할 수 있습니다. libcurl을 사용하는 C++ HTTP 클라이언트는 이 경로를 선택하기 위해 자체 SOCKS 핸드셰이크가 필요하지 않습니다. 허용된 공용 엔드포인트의 경우, SOCKS5 프록시 목록이 예시적인 loopback 리스너를 대체할 호스트와 포트 후보를 제공합니다.

빈 CURLOPT_NOPROXY 값은 프록시 테스트를 의도적으로 만듭니다. 일반 애플리케이션 정책에 맞출 때 의도된 바이패스를 유지하세요. 이러한 옵션은 이 핸들에만 적용되며, 프로세스의 다른 라이브러리와 소켓은 이를 상속하지 않습니다.

옵션 설정과 전송의 반환 값은 애플리케이션의 오류 처리로 확인하세요. SOCKS에 도달하거나 협상하지 못하는 경우는 어떤 HTTP 응답보다 먼저 발생할 수 있으므로 웹사이트 상태 코드를 제공하지 않습니다.

필요한 프록시 자격 증명은 웹사이트 로그인과 별도로 지원되는 프록시 인증 설정과 비밀 메커니즘을 사용합니다. TLS 검증을 활성화한 상태로 두세요. SOCKS를 통해 연결을 열어도 HTTPS 서비스의 신원이 확인되지는 않습니다.

관련 글