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

方法二 使用 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));
     // 创建访问网络URL
     URL 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 {
     // 创建访问网络URL
     URL 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 {
     // 创建访问网络URL
     URL url = new URL(urlStr);
     // 代理用户名密码
     String authString = proxyUser + ":" + proxyPass;
     // 注意前面的Basic
     String 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());
    }
}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值