1

我正在使用带有 htmlunit 的代理,我的代理列表包含 http 和 socks 的混合,我不知道要传递给 htmlunit 的下一个选定代理是 http 还是 socks,htmlunit 会自动确定类型并使用适当的规则通过那个代理连接?

4

4 回答 4

1

我也制作了一个使用混合代理的应用程序,但那是不久前的事了。在该版本的 HtmlUnit 中,需要明确告知代理是否为 SOCKS,否则它假定它是 HTTP 代理。我简要查看了更改日志,并没有发现任何迹象表明这已更改,因此答案应该是否定的,如果您不告诉 HtmlUnit 代理是 SOCKS,它将假定代理是 HTTP。

要检查代理是什么类型,可以使用以下内容:

SocketAddress addr = new InetSocketAddress("proxyAddress", port);
Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); //or Proxy.Type.SOCKS
URL url = new URL("http://google.com");
URConnection conn = url.openConnection(proxy);

如果代码失败(即抛出异常),那么代理很可能是死机或 SOCKS。(HtmlUnit 无论如何都会在第一种情况下抛出异常,或者如果您不确定代理是否存在,您可以使用 Proxy.Type.SOCKS 再次执行相同的测试。)

于 2011-07-26T14:22:03.930 回答
0

查看Java 网络和代理

它讨论了设置代理的多种策略。它还提供了通过代理选择器为同一连接提供多个代理的选项。

于 2013-05-30T05:45:29.490 回答
0

其他两个答案是关于如何在 Java 程序中通用地使用代理,但它与 HtmlUnit 有点不同。在 Java 进程上设置代理什么都不做;相反,您希望模拟浏览器使用代理。

int myProxyPort=8080;
WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_8, "myproxyhost.com", myProxyPort);
于 2014-12-23T17:37:15.030 回答
0

该框架为您检测代理类型,并可以为您实例化具有正确 Socks/Http/Https 代理配置的 HtmlUnit WebClient:https ://github.com/subes/invesdwin-webproxy

本质上,它在为您维护其代理列表时会自动执行试错方法。因此,您不必在自己的代码中担心这一点。

于 2017-06-25T18:16:51.187 回答