Apache HttpClient 5.5 在连接管理器的套接字设置中提供了 SOCKS 配置路径。其维护中的示例使用 setSocksProxyAddress:

InetSocketAddress socks =
    new InetSocketAddress("proxy.example.net", 1080);

PoolingHttpClientConnectionManager manager =
    PoolingHttpClientConnectionManagerBuilder.create()
        .setDefaultSocketConfig(
            SocketConfig.custom()
                .setSocksProxyAddress(socks)
                .build()
        )
        .build();

CloseableHttpClient client = HttpClients.custom()
    .setConnectionManager(manager)
    .build();

该片段使用 HttpClient 5 的 org.apache.hc 包以及 HttpCore 的 SocketConfig。用此客户端发出的请求会使用上面配置的连接池。当应用程序的所有权范围结束时,关闭该客户端。

照常把实际的网站 URL 放到请求上。对于无需代理认证、允许访问的公开站点请求,SOCKS 代理列表提供候选地址;请选择实际运行时支持的 SOCKS 版本。SOCKS 地址配置的是用于到达它的传输层,并不是以 HttpHost 形式提供的 HTTP 正向代理路由。

这些是该管理器的默认套接字设置。使用按路由的 SocketConfig 解析器的应用,应改为通过该策略应用所需的 SOCKS 设置。该示例保留了连接管理器常规的目标 DNS 策略;远程名称解析需要另行验证的配置。

相关文章