在应用现有的 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 代理列表提供主机和端口候选,以替换示例中的回环监听器。

空的 CURLOPT_NOPROXY 值使代理测试成为有意为之。将其适配到正常应用策略时,请保留预期的绕过项。这些选项只影响此句柄;进程中的其他库和套接字不会继承它们。

通过应用的错误处理检查选项设置和传输的返回值。无法到达 SOCKS 或与其协商可能发生在任何 HTTP 响应之前,因此不会提供网站状态码。

所需的代理凭据使用受支持的代理身份验证设置和密钥机制,与网站登录分开。保持启用 TLS 验证:通过 SOCKS 打开连接并不能确立 HTTPS 服务的身份。

相关文章