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

要想让你的java应用使用代理连接网络,有两种方式可以做到。一、设置System的properties,这种方法的缺点是不能为单独应用设置不同的代理。二、使用Proxy类,这种方法可以为单独的应用设置单独的代理。

首先来讲一下设置system properties的方法,有两种方法可以设置,一是直接在java代码里面调用System.setProperty()方法,还有就是通过-D选项添加java虚拟机参数,如  java -Dhttp.proxyHost=192.168.254.254     -Dhttp.proxyPort=9000。当然你也可以指定不使用代理访问的网站或者主机,http.nonProxyHosts属性指定不使用代理访问的域。示例如下所示:

System.setProperty(“http.proxyHost”, “192.168.254.254″);System.setProperty(“http.proxyPort”, “9000″);System.setProperty(“http.nonProxyHosts”, “localhost”);

如果你想使用ftp代理可以以相同的方式设定如下系统属性:

ftp.proxyHost, ftp.proxyPort, and ftp.nonProxyHosts

使用socket代理可以设定socksProxyHost socksProxyPort

这种方式的缺点是不能对单独的连接设置代理,下面是一段示例代码:
            /**

     *@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类代理。使用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();

    }

  }

}

<!-- Easy AdSense V2.91 --><!-- Post[count: 1] -->

你可能感兴趣的:(java,应用服务器,虚拟机,socket,网络应用)