Apache HttpClient 5.5 在连接管理器上的 SOCKS 设置
使用 SocketConfig 配置连接池的套接字策略,而不是 HTTP 代理路由或自定义套接字工厂。
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 策略;远程名称解析需要另行验证的配置。