本文共 4642 字,大约阅读时间需要 15 分钟。
一 使用系统属性来完成代理设置, 这种方法比较简单, 但是不能对单独的连接来设置代理:
public static void main(String[] args) {Properties prop = System.getProperties();// 设置http访问要使用的代理服务器的地址prop.setProperty("http.proxyHost", "192.168.0.254");// 设置http访问要使用的代理服务器的端口prop.setProperty("http.proxyPort", "8080");// 设置不需要通过代理服务器访问的主机,可以使用*通配符,多个地址用|分隔prop.setProperty("http.nonProxyHosts", "localhost|192.168.0.*");// 设置安全访问使用的代理服务器地址与端口// 它没有https.nonProxyHosts属性,它按照http.nonProxyHosts 中设置的规则访问prop.setProperty("https.proxyHost", "192.168.0.254");prop.setProperty("https.proxyPort", "443");// 使用ftp代理服务器的主机、端口以及不需要使用ftp代理服务器的主机prop.setProperty("ftp.proxyHost", "192.168.0.254");prop.setProperty("ftp.proxyPort", "2121");prop.setProperty("ftp.nonProxyHosts", "localhost|192.168.0.*");// socks代理服务器的地址与端口prop.setProperty("socksProxyHost", "192.168.0.254");prop.setProperty("socksProxyPort", "8000");// 设置登陆到代理服务器的用户名和密码Authenticator.setDefault(new MyAuthenticator("userName", "Password"));}static class MyAuthenticator extends Authenticator {private String user = "";private String password = "";public MyAuthenticator(String user, String password) {this.user = user;this.password = password;}protected PasswordAuthentication getPasswordAuthentication() {returnnew PasswordAuthentication(user, password.toCharArray());}}
二 使用Proxy来对每个连接实现代理, 这种方法只能在jdk 1.5以上的版本使用(包含jdk1.5), 优点是可以单独的设置每个连接的代理, 缺点是设置比较麻烦:
public static void main(String[] args) {try {URL url = new URL("http://www.baidu.com");// 创建代理服务器InetSocketAddress addr = new InetSocketAddress("192.168.0.254",8080);// Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr); // Socket 代理Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); // http 代理// 如果我们知道代理server的名字, 可以直接使用// 结束URLConnection conn = url.openConnection(proxy);InputStream in = conn.getInputStream();// InputStream in = url.openStream();String s = IOUtils.toString(in);System.out.println(s);} catch (Exception e) {e.printStackTrace();}}针对以上网络上的资源,自己总结了一下程序:public class ProxyClient {// 代理地址private static String proxyHost = "10.2.13.60";// 代理端口private static int proxyPort = 808;// 代理用户名private static String proxyUser = "cpst";// 代理密码private static String proxyPass = "cpst";// 访问网络资源private static String urlStr = "http://www.163.com";public static void proxyOne() {try {// 指定代理服务器地址和端口InetSocketAddress isa = new InetSocketAddress(proxyHost, proxyPort);// 创建代理Proxy proxy = new Proxy(Proxy.Type.HTTP, isa);// 设置登陆到代理服务器的用户名和密码Authenticator.setDefault(new MyAuthenticator(proxyUser, proxyPass));// 创建访问网络URLURL url = new URL(urlStr);// 通过代理服务器访问URLConnection uc = url.openConnection(proxy);// 返回字节流InputStream is = uc.getInputStream();// 打印返回结果int c;while ((c = is.read()) != -1) {System.out.print((char) c);}// 关闭返回字节流is.close();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public static void proxyTwo() {// 取得系统属性Properties prop = System.getProperties();// 设置http访问要使用的代理服务器的地址prop.setProperty("http.proxyHost", proxyHost);// 设置http访问要使用的代理服务器的端口prop.setProperty("http.proxyPort", String.valueOf(proxyPort));// 设置登陆到代理服务器的用户名和密码Authenticator.setDefault(new MyAuthenticator(proxyUser, proxyPass));try {// 创建访问网络URLURL url = new URL(urlStr);// 打开连接URLConnection uc = url.openConnection();// 返回字节流InputStream is = uc.getInputStream();// 打印返回结果int c;while ((c = is.read()) != -1) {System.out.print((char) c);}// 关闭返回字节流is.close();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public static void proxyThree() {// 取得系统属性Properties prop = System.getProperties();// 设置http访问要使用的代理服务器的地址prop.setProperty("http.proxyHost", proxyHost);// 设置http访问要使用的代理服务器的端口prop.setProperty("http.proxyPort", String.valueOf(proxyPort));try {// 创建访问网络URLURL url = new URL(urlStr);// 代理用户名密码String authString = proxyUser + ":" + proxyPass;// 注意前面的BasicString auth = "Basic"+ new BASE64Encoder().encode(authString.getBytes());// 打开连接URLConnection conn = url.openConnection();// 设置用户名密码认证conn.setRequestProperty("Proxy-Authorization", auth);// 返回字节流InputStream is = conn.getInputStream();// 打印返回结果int c;while ((c = is.read()) != -1) {System.out.print((char) c);}// 关闭返回字节流is.close();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}static class MyAuthenticator extends Authenticator {private String user = "";private String password = "";public MyAuthenticator(String user, String password) {this.user = user;this.password = password;}protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(user, password.toCharArray());}}}
本文转自邴越博客园博客,原文链接:http://www.cnblogs.com/binyue/p/4181689.html,如需转载请自行联系原作者