通过VPN /代理进行JSoup

时间:2012-11-08 11:46:28

标签: java proxy httpclient jsoup vpn

我试图使用JSoup来抓取登台服务器上的某些页面。要使用浏览器查看登台服务器上的页面,我需要连接到VPN。

我已连接到VPN,但当我使用JSoup尝试抓取页面时,它会保持超时。如何让我的程序使用VPN连接。或者在这里我还有什么别的想法?

注意:我也在程序的另一部分使用HttpClient。有没有办法在程序初始化后将程序设置为连接到VPN / Proxy,以便JSoup和HttpClient都使用VPN /代理。

由于

3 个答案:

答案 0 :(得分:8)

您可以为代理设置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来解决此问题。

答案 1 :(得分:5)

从版本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();

答案 2 :(得分:3)

如果您的代理需要用户名/密码身份验证,请添加for 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();