gpt4 book ai didi

java - 如何将 SOCKS 与 HtmlUnit 一起使用?

转载 作者:行者123 更新时间:2023-11-30 09:56:18 24 4
gpt4 key购买 nike

是否可以通过 SOCKS 代理使用 HtmlUnit?谁能提供代码示例?

====

所以我研究了 webclient 资源,这是我能想到的最好的方法:

  1. 子类 MultiThreadedHttpConnectionManager 以便它允许设置 SOCKS 信息,如果已设置,则在返回连接之前设置 SOCKS 参数

  2. 子类 WebConnection - 重写 createHttpClient 以便它使用步骤 1 中的管理器并首先添加一个方法来直接获取该管理器或 http 客户端(它现在受到保护 - 太糟糕了......)

  3. 使用 1) 创建一个 WebClient 实例 2) 创建子类 WebConnection 3) 将其设置为由 WebClient 使用 4 ) 访问连接管理器并使用它的方法来使用 socks

最佳答案

您需要做的就是设置 appropriate system properties在创建 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,那么您的代码就不是线程安全的(因为那些系统属性是全局的)。一种解决方案是同步某些内容,但这当然会引入性能问题(对您来说可能无关紧要)。

如果您真的想在每个套接字的基础上控制它,那么我认为您需要执行如下操作:

  1. 创建一个自定义 ProtocolSocketFactory,将 java.net.Proxy 对象传递给 Socket 构造函数(如 this example 中)。
  2. 创建一个使用此 ProtocolSocketFactory 的自定义 Protocol
  3. 使用 HttpConnection.setProtocol() 将此 Protocol 应用于自定义连接管理器中的新连接。

我还没有实际测试过这个,但基于对 HttpClient 3.1 源代码的快速浏览,我认为它应该是这样做的。我很想听听您最终是如何解决这个问题的:-)。祝你好运!

关于java - 如何将 SOCKS 与 HtmlUnit 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2405418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com