在HtmlUnit中设置代理

时间:2011-07-26 08:53:13

标签: java http proxy htmlunit socks

我正在使用htmlunit的代理,我的代理列表包含http和socks的混合物,我不知道下一个选择要传递给htmlunit的代理是否为http或socks类型,将htmlunit自动确定类型并使用通过该代理连接的适当规则?

4 个答案:

答案 0 :(得分: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再次执行相同的测试。)

答案 1 :(得分:0)

查看Java Networking and Proxies

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

答案 2 :(得分:0)

另外两个答案是关于如何在Java程序中一般使用代理,但它与HtmlUnit略有不同。在Java进程上设置代理不会做任何事情;相反,您希望模拟浏览器使用代理。

int myProxyPort=8080;
WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_8, "myproxyhost.com", myProxyPort);

答案 3 :(得分:0)

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

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