Java HttpClient实现socks代理的示例代码
HttpClient实现socks代理
使用的环境
org.apache.httpcomponents httpclient 4.4.1 org.apache.httpcomponents httpcore 4.4.1
代码及ConnectionSocketFactory实现类
packagexxx;
importcom.lucas.admin.util.HttpClientUtil;
importorg.apache.http.HttpEntity;
importorg.apache.http.HttpHost;
importorg.apache.http.client.methods.CloseableHttpResponse;
importorg.apache.http.client.methods.HttpGet;
importorg.apache.http.client.protocol.HttpClientContext;
importorg.apache.http.config.Registry;
importorg.apache.http.config.RegistryBuilder;
importorg.apache.http.conn.socket.ConnectionSocketFactory;
importorg.apache.http.conn.socket.PlainConnectionSocketFactory;
importorg.apache.http.conn.ssl.SSLConnectionSocketFactory;
importorg.apache.http.impl.client.CloseableHttpClient;
importorg.apache.http.impl.client.HttpClients;
importorg.apache.http.impl.conn.PoolingHttpClientConnectionManager;
importorg.apache.http.protocol.HttpContext;
importorg.apache.http.ssl.SSLContexts;
importorg.apache.http.util.EntityUtils;
importjava.io.IOException;
importjava.net.InetSocketAddress;
importjava.net.Proxy;
importjava.net.Socket;
/**
*@authorkzcming
*@since2020/11/1915:51
*/
publicclassTest{
publicstaticvoidmain(String[]args)throwsException{
test("https://www.cnblogs.com/");
}
publicstaticvoidtest(Stringurl)throwsException{
//ConnectionSocketFactory注册
Registryreg=RegistryBuilder.create()
.register("http",newMyConnectionSocketFactory())
.register("https",newMySSLConnectionSocketFactory()).build();
//HTTP客户端连接管理池
PoolingHttpClientConnectionManagerconnManager=newPoolingHttpClientConnectionManager(reg);
CloseableHttpClienthttpclient=HttpClients.custom()
.setConnectionManager(connManager)
.build();
try{
//socks代理地址,socks地址和端口,这里随便写了一个1008
InetSocketAddresssocksaddr=newInetSocketAddress("你的地址",1008);
HttpClientContextcontext=HttpClientContext.create();
context.setAttribute("socks.address",socksaddr);
//请求目标
HttpGetrequest=newHttpGet(url);
System.out.println("----------------------------------------");
System.out.println("执行请求:"+request.getRequestLine());
System.out.println("通过代理:"+socksaddr);
System.out.println("----------------------------------------");
CloseableHttpResponseresponse=httpclient.execute(request,context);
try{
HttpEntityentity=response.getEntity();
System.out.println("----------------------------------------");
System.out.println("返回响应:"+response.getStatusLine());
System.out.println("响应内容:"+EntityUtils.toString(entity));
System.out.println("----------------------------------------");
}finally{
response.close();
}
}finally{
httpclient.close();
}
}
/**
*实现http链接的socket工厂
*/
staticclassMyConnectionSocketFactoryextendsPlainConnectionSocketFactory{
@Override
publicSocketcreateSocket(finalHttpContextcontext)throwsIOException{
InetSocketAddresssocksaddr=(InetSocketAddress)context.getAttribute("socks.address");
//socket代理
Proxyproxy=newProxy(Proxy.Type.SOCKS,socksaddr);
returnnewSocket(proxy);
}
}
/**
*实现https链接的socket工厂
*/
staticclassMySSLConnectionSocketFactoryextendsSSLConnectionSocketFactory{
publicMySSLConnectionSocketFactory(){
super(SSLContexts.createDefault(),getDefaultHostnameVerifier());
}
@Override
publicSocketcreateSocket(finalHttpContextcontext)throwsIOException{
InetSocketAddresssocksaddr=(InetSocketAddress)context.getAttribute("socks.address");
////socket代理
Proxyproxy=newProxy(Proxy.Type.SOCKS,socksaddr);
returnnewSocket(proxy);
}
}
}
以上就是JavaHttpClient实现socks代理的示例代码的详细内容,更多关于JavaHttpClient实现socks代理的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。