Java堂  


在URLHttpConnection中使用代理服务器

Filed under: JavaPlateform — Jet @ 12:23 下午
原文出处: 在URLHttpConnection中使用代理服务器
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

在JDK5之前如果在URLHttpConnection中使用代理服务器的话,只要在URL.openConnection()之前加入以下代码就可以:

  1. Properties prop = System.getProperties();
  2. prop.put("http.proxyHost", "120.0.0.1");
  3. prop.put("http.proxyPort", "1080");

意思就是加入几个环境变量,然后URLHttpConnection在执行的时候会读取这些环境变量。

  不过JDK5中URL增加了一个新的方法 openConnection(Proxy proxy),这样就可以直接设置代理地址了,代码如下:

  1. // 请自行加上try...cache代码
  2. URL url = new URL("http://www.javatang.com");
  3. // 设置代理服务
  4. SocketAddress add = new InetSocketAddress("120.0.0.1", "1080");
  5. Proxy p = new Proxy(Proxy.Type.SOCKS , add);
  6. // 打开连接
  7. HttpURLConnection conn = (HttpURLConnection)url.openConnection(p);

这样打开的连接就是使用代理服务器了,非常的方便。

  如果代理服务器有用户名密码的话,操作跟JDK5之前的操作相同。在上面的代理后面增加如下代码:

  1. String authentication = "proxyuser:proxypassword";
  2. String encodedLogin = new sun.misc.BASE64Encoder().encodeBuffer(authentication.getBytes());
  3. connection.setRequestProperty("Proxy-Authorization", "Basic " + encodedLogin);

参考资料:
J2SE5.0新特性之使用代理服务器
http://www.yesky.com/433/1886933.shtml
让URLConnection使用代理服务器
http://www.cnblogs.com/bjzhanghao/archive/2005/01/11/90236.html
java.net.SocketException: Socket is not connected
http://forum.java.sun.com/thread.jspa?threadID=601645&messageID=3226903

4 条评论 »

  1. 把代理服务器设置成一个错误的IP地址,程序依然可以正常运行,就是说这段程序虽然设置了代理服务器,但一旦程序发现代理是错误的,就会直接连接到目的地址而不经过代理服务器。

    评论 by William — 2008年05月20日 @ 9:43 上午

  2. 第一条评论是正确的么? 我现在遇到这样的问题,不管http代理如何设置(很明显是错误的),却能够连接成功。而 socks 就不同了。
    多谢!

    评论 by pllq — 2009年07月28日 @ 7:58 上午

  3. 我现在遇到这样的问题,不管http代理如何设置(很明显是错误的),却能够连接成功。而 socks 就不同了。
    第一条评论是正确的么? 多谢

    评论 by pllq — 2009年07月28日 @ 7:59 上午

  4. [...] : 2011-08-25标签 : URLHttpConnection,代理服务器 分类 : Java评论 : 0条 原文出处: 在URLHttpConnection中使用代理服务器 作者: Jet Mah from [...]

    Pingback by 在URLHttpConnection中使用代理服务器 | 7966.org — 2011年08月25日 @ 10:45 上午

留下评论