Java中通过代理连接至指定的URL

 公司要访问外网需要使用代理,突然对Java如何使用代理产生了兴趣。

方法一:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Authenticator;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ProxyConnectionTest {
	public static void main(String[] args) throws IOException {
		// 设置代理 地址和密码
		Proxy proxy = new Proxy(Proxy.Type.HTTP, 
				new InetSocketAddress(host, port));

		// 设置代理的密码验证
		Authenticator auth = new Authenticator() {
			private PasswordAuthentication pa = 
				new PasswordAuthentication(username, password.toCharArray());
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return pa;
			}
		};
		Authenticator.setDefault(auth);
		
		// 打开连接
		System.out.println("connecting...");
		URL url = new URL("http://www.iteye.com/");
		URLConnection conn = url.openConnection(proxy);

		// 读取内容
		InputStreamReader isr = new InputStreamReader(conn.getInputStream());
		BufferedReader br = new BufferedReader(isr);
		String line = null; 
		while ((line = br.readLine()) != null) {
			System.out.println(line);
		}
		
		System.out.println("done.");
	}
}

然而,这里指定一些URL时总是出现这样那样的错误。比如就无法正常读取http://news.google.com,很多网站的域名后面必须加"/",如果"http://www.iteye.com/"才能取到内容,真是搞不通。

方法二:

import java.util.Properties; 

import java.net.*; 

import java.io.*; 

public class TestHttpProxy { 

 public static void main(String[] args) { 

  String sUrl = "http://java.sun.com/index.html"; 

  Properties prop = System.getProperties(); 

  prop.put("http.proxyHost","192.168.1.111"); 

  prop.put("http.proxyPort","80"); 

  try{ 

   URL su = new URL(sUrl); 

   System.out.println("url : " + su); 

   URLConnection uc = su.openConnection(); 

   System.out.println("uc : " + uc); 

   InputStream is = su.openStream(); 

   System.out.println("ic : " + is.read()); 

   is.close(); 

   System.out.println("ok"); 

  } catch(Exception e) { 

   e.printStackTrace(); 

  } 

 } 

} 

猜你喜欢

转载自wezly.iteye.com/blog/671919