天天看點

[轉帖]J2SE5.0新特性之使用代理伺服器

導讀:

  J2SE1.5也被稱為J2SE5.0,在5.0以前的代理伺服器設定挺不友好,現在,5.0提供了對通過代理伺服器的更加靈活的控制,它可以對http,https,ftp,socks等分别設定,而且還可以設定不需要通過代理伺服器的主機和位址。這和我們在IE、firefox中設定代理伺服器類似。

  

  1.你可以在通過java -DXXXX=YYYY方式在程式啟動時設定,你也可以在程式中将設定放入系統屬性中,你也可以設定Proxy類,通過它來控制。

  

  2.可以通過ProxySelector來做自己的代理伺服器的負載平衡等。

  

  package com.kuaff.jdk5package;

  

  import java.io.IOException;

  import java.io.InputStream;

  import java.net.InetSocketAddress;

  import java.net.MalformedURLException;

  import java.net.Proxy;

  import java.net.ProxySelector;

  import java.net.SocketAddress;

  import java.net.URI;

  import java.net.URISyntaxException;

  import java.net.URL;

  import java.net.URLConnection;

  import java.util.List;

  import java.util.Properties;

  

  public class NetProxy

  {

  BBS.bitsCN.com網管論壇

  // 測試本地JVM的網絡預設配置

  public void setLocalProxy()

  {

  Properties prop = System.getProperties();

  //設定http通路要使用的代理伺服器的位址

  prop.setProperty("http.proxyHost", "10.10.0.96");

  //設定http通路要使用的代理伺服器的端口

  prop.setProperty("http.proxyPort", "8080");

  //設定不需要通過代理伺服器通路的主機,可以使用*通配符,多個位址用|分隔

  prop.setProperty("http.nonProxyHosts", "localhost|10.10.*");

  

  //設定安全通路使用的代理伺服器位址與端口

  //它沒有https.nonProxyHosts屬性,它按照http.nonProxyHosts 中設定的規則通路

  prop.setProperty("https.proxyHost", "10.10.0.96");

  prop.setProperty("https.proxyPort", "443");

  

  //使用ftp代理伺服器的主機、端口以及不需要使用ftp代理伺服器的主機

  prop.setProperty("ftp.proxyHost", "10.10.0.96");

  prop.setProperty("ftp.proxyPort", "2121");

  prop.setProperty("ftp.nonProxyHosts", "localhost|10.10.*");

  

  //socks代理伺服器的位址與端口

  prop.setProperty("socksProxyHost", "10.10.0.96");

  中國網管論壇

  prop.setProperty("socksProxyPort", "1080");

  }

  

  // 清除proxy設定

  public void removeLocalProxy()

  {

  Properties prop = System.getProperties();

  prop.remove("http.proxyHost");

  prop.remove("http.proxyPort");

  prop.remove("http.nonProxyHosts");

  

  prop.remove("https.proxyHost");

  prop.remove("https.proxyPort");

  

  prop.remove("ftp.proxyHost");

  prop.remove("ftp.proxyPort");

  prop.remove("ftp.nonProxyHosts");

  

  prop.remove("socksProxyHost");

  prop.remove("socksProxyPort");

  }

  

  //

  

  // 測試http

  public void showHttpProxy(Object... proxy)

  {

  URL url = null;

  try

  {

  url = new URL("http://blog.csdn.com/smallnest");

  }

  catch (MalformedURLException e)

  {

  return;

  }

  try

  {

  URLConnection conn = null;

  switch (proxy.length)

  {

  case 0:

  conn = url.openConnection(); bbs.bitsCN.com

  break;

  case 1:

  conn = url.openConnection((Proxy) proxy[0]);

  break;

  default:

  break;

  }

  

  if (conn == null)

  return;

  

  conn.setConnectTimeout(3000); // 設定連接配接逾時時間

  InputStream in = conn.getInputStream();

  byte[] b = new byte[1024];

  try

  {

  while (in.read(b) > 0)

  {

  System.out.println(new String(b));

  }

  }

  catch (IOException e1)

  {

  }

  }

  catch (IOException e1)

  {

  e1.printStackTrace();

  }

  

  }

  

  // 測試ftp

  public void showFtpProxy(Object... proxy)

  {

  URL url = null;

  try

  {

  url = new URL("ftp://ftp.tsinghua.edu.cn");

  }

  catch (MalformedURLException e)

  {

  return;

  }

  try

  {

  URLConnection conn = null;

  switch (proxy.length)

  {

  case 0:

  conn = url.openConnection();

  break;

  case 1:

  中國.網管聯盟

  conn = url.openConnection((Proxy) proxy[0]);

  break;

  default:

  break;

  }

  

  if (conn == null)

  return;

  

  conn.setConnectTimeout(3000); // 設定連接配接逾時時間

  InputStream in = conn.getInputStream();

  byte[] b = new byte[1024];

  try

  {

  while (in.read(b) > 0)

  {

  System.out.println(new String(b));

  }

  }

  catch (IOException e1)

  {

  }

  }

  catch (IOException e1)

  {

  e1.printStackTrace();

  }

  

  }

  

  // 得到一個proxy

  public Proxy getProxy(Proxy.Type type, String host, int port)

  {

  SocketAddress addr = new InetSocketAddress(host,port);

  Proxy typeProxy = new Proxy(type, addr);

  return typeProxy;

  }

  

  public static void main(String[] args)

  {

  NetProxy proxy = new NetProxy();

  //測試代理伺服器

  proxy.setLocalProxy();

  proxy.showHttpProxy();

  

  //下面兩行是清除系統屬性,而通過Proxy類指定代理伺服器 中國網管聯盟

  // proxy.removeLocalProxy

  //proxy.showHttpProxy(proxy.getProxy(Proxy.Type.SOCKS,"10.10.0.96",1080));

  

  

  }

  }

本文轉自

http://www.bitscn.com/java/jdk/200605/20601.html