公司要访问外网需要使用代理,突然对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(); } } }