【问题标题】:Setting proxies in HtmlUnit在 HtmlUnit 中设置代理
【发布时间】:2011-07-26 08:53:12
【问题描述】:

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

【问题讨论】:

    标签: java http proxy htmlunit socks


    【解决方案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 再次执行相同的测试。)

    【讨论】:

    • 你知道如何在使用 htmlunit 之前检查代理类型吗?
    • 我只知道试错法;测试两者。我将在答案中附加一个示例。
    【解决方案2】:

    查看Java Networking and Proxies

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-02-24
          • 2011-12-06
          • 2015-11-26
          • 2018-10-06
          • 2016-06-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多