您需要做的就是在创建对象之前设置适当的系统属性。WebClient
例如:
System.setProperty("socksProxyHost", "localhost"); // replace "localhost" with your proxy server
System.setProperty("socksProxyPort", "9999"); // replace "9999" with your proxy port number
WebClient client = new WebClient();
此时,HttpClient(由 HtmlUnit 在幕后使用)将获取设置并使用 SOCKS 代理进行所有网络通信。
更新:我阅读了您修改后的问题(和您的评论),我认为您走在正确的轨道上。问题是,如果您使用上述系统属性实现第 1 步,那么您的代码不是线程安全的(因为这些系统属性是全局的)。一种解决方案是同步某些东西,但这当然会引入性能问题(对你来说可能无关紧要)。
如果您真的想在每个套接字的基础上控制它,那么我认为您需要执行以下操作:
- 创建一个将对象
ProtocolSocketFactory
传递给构造函数的自定义(如本例所示)。java.net.Proxy
Socket
- 创建一个
Protocol
使用 this的自定义ProtocolSocketFactory
。
- 使用 . 将其应用于
Protocol
自定义连接管理器中的新连接HttpConnection.setProtocol()
。
我实际上并没有对此进行测试,但是基于对 HttpClient 3.1 源代码的快速浏览,我认为这就是它的完成方式。我很想听听你最终如何解决这个问题:-)。祝你好运!