【问题标题】:JSoup over VPN/proxy基于 VPN/代理的 JSoup
【发布时间】:2012-10-28 14:46:50
【问题描述】:

我正在尝试使用 JSoup 来抓取暂存服务器上的一些页面。要使用浏览器查看暂存服务器上的页面,我需要连接到 VPN。

我已连接到 VPN,但是当我使用 JSoup 尝试抓取页面时,它一直超时。如何让我的程序使用 VPN 连接。或者这里还有什么我没有想到的?

注意:我还在程序的另一部分使用了 HttpClient。有没有一种方法可以让我的程序在程序初始化后连接到 VPN/Proxy,以便 JSoup 和 HttpClient 都使用 VPN/Proxy。

谢谢

【问题讨论】:

  • 如果您有 HttpClient 通过代理运行,您可以使用它将网站下载到字符串中并解析这个(如我的答案中的解决方案#2)。

标签: java proxy httpclient jsoup vpn


【解决方案1】:

您可以为代理设置 java 属性:

// if you use https, set it here too
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

或者将网站下载成字符串然后解析:

final URL website = new URL("http://your.url.here"); // The website you want to connect

// -- Setup connection through proxy
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("<proxyserver>", 1234)); // set proxy server and port
HttpURLConnection httpUrlConnetion = (HttpURLConnection) website.openConnection(proxy);
httpUrlConnetion.connect();

// -- Download the website into a buffer
BufferedReader br = new BufferedReader(new InputStreamReader(httpUrlConnetion.getInputStream()));
StringBuilder buffer = new StringBuilder();
String str;

while( (str = br.readLine()) != null )
{
    buffer.append(str);
}

// -- Parse the buffer with Jsoup
Document doc = Jsoup.parse(buffer.toString());

您也可以将HttpClient 用于此解决方案。

【讨论】:

    【解决方案2】:

    如果您的代理需要用户名/密码身份验证,则为 ollo 添加。

    final String authUser = <username>;
    final String authPassword = <password>;
    Authenticator.setDefault(
       new Authenticator() {
          public PasswordAuthentication getPasswordAuthentication() {
             return new PasswordAuthentication(
                   authUser, authPassword.toCharArray());
          }
       }
    );
    
    System.setProperty("http.proxyHost", <yourproxyhost>);
    System.setProperty("http.proxyPort", <yourproxyport>);
    System.setProperty("http.proxyUser", authUser);
    System.setProperty("http.proxyPassword", authPassword);
    
    Document doc = Jsoup.connect("http://your.url.here").get();
    

    【讨论】:

      【解决方案3】:

      从 1.9 版开始,您可以在连接上设置它:https://jsoup.org/apidocs/org/jsoup/Connection.html#proxy-java.net.Proxy-

      JSoup.connect("http://your.url.here").proxy("<proxy-host>", <proxy-port>).get();
      

      【讨论】:

        猜你喜欢
        • 2010-12-18
        • 2021-04-18
        • 2018-07-17
        • 1970-01-01
        • 1970-01-01
        • 2016-12-26
        • 1970-01-01
        • 1970-01-01
        • 2021-03-20
        相关资源
        最近更新 更多