JAVA几种代理总结
来源:互联网 发布:圆谷官方奥特曼数据 编辑:程序博客网 时间:2024/06/07 06:08
JAVA几种代理总结
一 java使用IE代理
(在这之前不能使用过http连接)首先需要设置System.setProperty("java.net.useSystemProxies","true");
如果设置的是Http代理,然后java URLConnection访问会默认走代理。(IQ在使用)
如果设置的是Socks代理,然后new Socket(realIp, realport);访问会自动默认走代理。
二 得到IE浏览器设置的代理ip和端口(ip 和port 在 proxy 返回的address里面 )。
注意,在第一次检测代理之前,一定不能有访问网络的操作,否则检测不到代理(实质就是,在没有访问网络之前System.setProperty("java.net.useSystemProxies","true")设置才生效)
private static Proxy detectProxy(String proxyTypeUrl) throws URISyntaxException{
// Must first set useSystemProxies to true. if not,cann't detectproxy.
System.setProperty("java.net.useSystemProxies","true");
List<Proxy>proxyList = null;
proxyList =ProxySelector.getDefault().select(new URI(proxyTypeUrl));
for (int j = 0; j <proxyList.size(); j++) {
Proxy proxy =proxyList.get(j);
if (proxy.type() !=Proxy.Type.DIRECT) {
return proxy;
}
}
return null;
}
使用Example:
三,根据已经知道的proxyip和proxyport使用代理
①Http方式访问的代理使用
方法一(只支持http,https,ftp代理)直接设置属性就可以走代理,属性在初始化代理时设置好就行.注意这种代理时全局的,设置以后全部会自动走代理,如果需要单个请求走代理(在走代理失败的话,会自动尝试本地直接访问),请使用方法二代理.
// http协力代理属性设置
System.setProperty("http.proxySet","true");
System.setProperty("http.proxyHost", "proxyIp");
System.setProperty("http.proxyPort","proxyPort");
// https协力代理属性设置
System.setProperty("https.proxyHost","proxyIp");
System.setProperty("https.proxyPort","proxyPort");
//ftp协议属性设置
System.setProperty("ftp.proxyHost","proxyIp");
System.setProperty("ftp.proxyPort","proxyPort");
// ftp 不走代理主机设置
System.setProperty("ftp.nonProxyHosts","localhost|192.168.0.*");
根据自己需要的代理种类,设置好属性以后,如果访问URLConnection就可以自动走代理。
//直接访问目的地址,自动会走代理
URL url = newURL("http://www.baidu.com");
URLConnection con =url.openConnection();
方法二(支持http代理和socks代理)通过构建Proxy来走代理,这种代理1.5及以后的jdk才支持,可以对单独的请求设置代理(在走代理失败的话,不会自动尝试本地直接访问).
Proxy proxy= new Proxy(Proxy.Type.HTTP,newInetSocketAddress("proxyip",proxyport)); //根据实际情况,如果设置的是socks代理,使用参数Proxy.Type.SOCKS
URLConnection connection =url.openConnection(proxy);
方法三(支持http代理)启动运用通过JVM参数走代理,注意这种代理时全局的,设置以后全部会自动走代理,如果需要单个请求走代理(在走代理失败的话,会自动尝试本地直接访问),请使用方法二代理
-DproxySet=true
-Dhttp.proxyHost=proxyIp
-Dhttp.proxyPort=proxyPort
附:
Http代理如果需要用户名和密码,请先如下设置.
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("userName","password"
.toCharArray());
}
});
②Socket方式通信的代理使用
方法一(只支持Socks代理),直接设置属性,自动走代理,注意这种代理时全局的,设置以后全部会自动走代理, (在走代理失败的话,不会自动尝试本地直接访问).(IQ在使用)
// 设置sock代理属性
System.setProperty("socksProxySet","true");
System.setProperty("socksProxyHost","proxyIp");
System.setProperty("socksProxyPort","proxyPort");
// 直接访问,自动走代理
socket = new Socket(realIp, realport);
in = newDataInputStream(socket.getInputStream());
out = newDataOutputStream(socket.getOutputStream());
方法二(只支持Http代理)通过协议,单独的Socket设置代理,(在走代理失败的话,不会自动尝试本地直接访问).(IQ在使用)
socket = new Socket(proxyIP, proxyPort);
in = newDataInputStream(socket.getInputStream());
out = newDataOutputStream(socket.getOutputStream());
然后通过 out.write方法向代理服务器发送协议字符串:
BASE64Encoder encoder = new BASE64Encoder();
//"user:password" ————》代理服务器的用户和密码,必须以英文:分开,如果没有可以不设置。并且需要base64编码。
String authKey =encoder.encode("user:password".getBytes());
String protocal = "CONNECT " +"realIP" + ":" + realPort
+ "HTTP/1.1\r\nProxy-Authorization: Basic " + authKey
+ "\r\n\r\n";
out.write(protocal.getBytes());
发送以后,代理服务器和真实主机建立连接,下次发送数据自动走代理。
方法三(只支持Socks代理)通过Proxy构造代理,可为单独的Socket设置代理
Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("socksProxyIp",”pPort”));
Socket socket = new Socket(proxy);
// 连接成功以后就可以自动通过代理通信
socket.connect(new InetSocketAddress("realIp",realPort));
注:上面的代理方式都已做demo初步验证,测试平台win7,jdk1.6
Etnet
David.Chen
- JAVA几种代理总结
- QTableview常用几种代理总结
- java代理的几种方式
- java代理的几种实现
- java读取配置文件的几种方法 设置代理
- java中使用代理访问网络的几种方法
- java使用代理访问网络的几种方法
- Java中使用代理访问网络的几种方法
- java使用代理访问网络的几种方法
- java动态代理总结
- Java总结(20) 代理
- java代理模式总结
- Java动态代理总结
- java代理机制总结
- Java动态代理总结
- Java 代理模式总结
- Java 代理总结
- Java 代理总结
- 软件开发 资料学习网址
- Linux_ 内存管理demo
- MyBatis解决JDBC开发中的问题
- forin遍历,解决Collection <__NSArrayM: 0x7ffa5261aa70> was mutated while being enumerated崩溃的问题
- js与webview进行交互
- JAVA几种代理总结
- java在处理异常时finally语句的作用
- 设计原则
- javascript中的this问题
- UItableView的两个重用机制区别
- C#反射:GetManifestResourceStream 获取项目资源为空解决方案
- class文件结构
- Unity与Java通信
- java对redis的基本操作