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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。