通过代理与JSoup连接

时间:2015-03-06 19:55:20

标签: java proxy jsoup

 System.setProperty("http.proxyHost", "<proxyip>"); // set proxy server
 System.setProperty("http.proxyPort", "<proxyport>");  //set proxy port
 Document doc = Jsoup.connect("http://your.url.here").get(); // Jsoup now connects via proxy

我有一个脚本会通过代理登录网站。 我试图通过向特定用户添加假代理来检查它是否有效,问题是它即使代理是假的也会登录,因此它不应该登录或发布。

我使用上面的代码来调用代理

1 个答案:

答案 0 :(得分:6)

JSoup的连接实际上基于java.net.HttpURLConnection。这就是为什么系统代理首先对JSoup有效的原因。

HttpURLConnection的工作方式是使用ProxySelector对象,该对象返回给定URI的所有可能代理。

HttpURLConnection尝试连接到URL时,它首先尝试连接到列表中的每个代理。如果列表中与代理的连接失败,则会尝试下一个,依此类推。但是,如果没有任何代理可以访问,默认为直接连接

如果您直接使用HttpURLConnection类,则可以使用usingProxy()方法,该方法在连接后会告诉您连接是否通过代理。但由于您的HttpURLConnection包含在org.jsoup.Connection对象中,因此您无法使用此方法。

总结一下:

  • 当你给它一个假代理时,它不会拒绝连接。它只需直接连接,无需代理。
  • 使用Jsoup.connect()方法,您无法确定是否通过了代理。请注意,即使您使用真正的代理,但它恰好是暂时无法访问的,连接也是直接的。

如果对您来说重要的是连接无法通过代理,那么您应该使用其他类进行连接(您可以使用HttpURLConnection或Apache HttpCore或者对你有用的任何东西),在确保连接通过代理后,从该连接获得InputStream,并使用Jsoup.parse()来解析HTML。