java中使用代理访问网络的几种方法

原创 2007年09月20日 22:37:00
 http://javasky.bloghome.cn/posts/86087.html
有些时候我们的网络不能直接连接到外网, 需要使用http或是https或是socket代理来连接到外网, 这里是java使用代理连接到外网的一些方法, 希望对你的程序有用.
方法一使用系统属性来完成代理设置, 这种方法比较简单, 但是不能对单独的连接来设置代理:
    /**
     *@paramargs
     */
    /**
     *@paramargs
     */
    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();
        }
    }
不是很详细, 有什么问题还望大家指正
================================
/*
 * Output:
 *  
 */

import java.io.InputStream;
import java.net.URL;

public class MainClass {

  public static void main(String args[]) {
    try {

      URL url = new URL("http://www.java2s.com");

      // Obtain output stream
      InputStream is = url.openStream();

      // Read and display data from url
      byte buffer[] new byte[1024];
      int i;
      while ((i = is.read(buffer)) != -1) {
        System.out.write(buffer, 0, i);
      }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
}
http://www.java2s.com/Code/JavaAPI/java.net/URLopenStream.htm
          

java使用代理访问网络的几种方法

http://blog.csdn.net/overmaker/article/details/4166399 有些时候我们的网络不能直接连接到外网, 需要使用http或是https或是soc...

使用Java测试网络连通性的几种方法

使用Java测试网络连通性的几种方法 摘要:本文列举集中典型的场景,介绍了通过Java网络编程接口判断机器之间可达性的几种方式。在实际应用中,可以根据不同的需要选择相应的方法稍加修改即可。对于更...
  • paullmq
  • paullmq
  • 2013年06月05日 17:19
  • 1802

使用Java测试网络连通性的几种方法

在网络编程中,有时我们需要判断两台机器之间的连通性,或者说是一台机器到另一台机器的网络可达性。在系统层面的测试中,我们常常用 Ping 命令来做验证。尽管 Java 提供了比较丰富的网络编程类库(包括...

使用Java测试网络连通性的几种方法

本文由浅入深地介绍了如何使用 Java 类库,判断两台机器之间网络是否可达。本文介绍了 Java 中三种不同的网络可达的判断方法以及针对 IPv4 和 IPv6 混合网络的编程方法。同时也介绍了这些方...

使用 Java 测试网络连通性的几种方法

在网络编程中,有时我们需要判断两台机器之间的连通性,或者说是一台机器到另一台机器的网络可达性。在系统层面的测试中,我们常常用 Ping 命令来做验证。尽管 Java 提供了比较丰富的网络编程类库(包括...
  • szyyyp
  • szyyyp
  • 2017年10月30日 22:17
  • 143

java应用使用代理访问网络设置 [转]

今天在公司内写了个demo,测试网络下载,结果外网连不上,内网可以下载,立马留意到是不是需要在java中设置代理,去度娘搜索了下,找到资料如下:   一般而言,要想让你的java应用使用代理连接网...
  • zai829
  • zai829
  • 2013年03月05日 20:28
  • 1152

Java中使用代理访问网络及验证

当我在使用Java.net包的API时,由于公司的网络设置了都是通过代理访问网络,因此每次都是遇到connection timeout的情况 针对这种情况,我查看了资料,和JDK的API,发现使用j...

在终端下间接使用Socks5代理的几种方法

http://blog.ihipop.info/2011/01/1988.html 

mstsc/ssh等就不能正常连接 网络代理 Proxifier 使用教程设置方法及注册码下载

为了网络的安全,一般的大公司,比如中移动、贝尔等,都会给外来的工作人员开代理上网的。这时,如果你想远程到一个主机的时候,就歇菜了。不过还是有办法处理的。 如果网络是经过代理的,mstsc/ssh...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中使用代理访问网络的几种方法
举报原因:
原因补充:

(最多只允许输入30个字)