通过代理连接 JSoup

Connection with JSoup via proxy

 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

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

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

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

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

HttpURLConnection 尝试连接到 URL 时,它首先尝试连接到列表中的每个代理。如果与列表中代理的连接失败,它将尝试下一个,依此类推。但是如果 none 的代理是可达的,它默认直接连接

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

总结一下:

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

如果连接只有通过代理才能正常工作对您很重要,您应该使用不同的 class 进行连接(您可以使用 HttpURLConnection 或 Apache HttpCore 或任何适合你的东西),并在确保连接通过代理后,从该连接获取 InputStream,并使用 Jsoup.parse() 解析 HTML.