博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java httpclient使用socks5代理(二)使用socks5代理服务
阅读量:7081 次
发布时间:2019-06-28

本文共 5528 字,大约阅读时间需要 18 分钟。

hot3.png

接上篇,完成了创建代理服务后,下面开始使用代理。

package com.test;import org.apache.http.HttpHost;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.protocol.HttpClientContext;import org.apache.http.config.Registry;import org.apache.http.config.RegistryBuilder;import org.apache.http.conn.DnsResolver;import org.apache.http.conn.socket.ConnectionSocketFactory;import org.apache.http.conn.socket.PlainConnectionSocketFactory;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;import org.apache.http.protocol.HttpContext;import org.apache.http.ssl.SSLContexts;import org.apache.http.util.EntityUtils;import javax.net.ssl.SSLContext;import java.io.*;import java.net.*;import java.util.Map;public class HttpClientUtil {    // 依次是代理地址,代理端口号,用户密码    private static String proxyHost="192.168.1.2";    private static int proxyPort=1080;    private static String proxyName="user";    private static String proxyPwd="123456";    public static String getWithProxy(String url, Map
headers, String charset) { //用户名和密码验证 Authenticator.setDefault(new Authenticator(){ protected PasswordAuthentication getPasswordAuthentication(){ PasswordAuthentication p=new PasswordAuthentication(proxyName, proxyPwd.toCharArray()); return p; } }); Registry
reg = RegistryBuilder.
create() .register("http", new MyConnectionSocketFactory()) .register("https", new MySSLConnectionSocketFactory(SSLContexts.createSystemDefault())).build(); PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(reg, new FakeDnsResolver()); CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(cm).build(); try { InetSocketAddress socksaddr = new InetSocketAddress(proxyHost,proxyPort); HttpClientContext context = HttpClientContext.create(); context.setAttribute("socks.address", socksaddr); HttpGet httpget = new HttpGet(url); if(headers != null) { for(String key:headers.keySet()) { httpget.setHeader(key, headers.get(key)); } } CloseableHttpResponse response = httpclient.execute(httpget,context); try { return new String(EntityUtils.toByteArray(response.getEntity()), charset); } finally { response.close(); } } catch (Exception e) { e.printStackTrace(); } finally { try { httpclient.close(); } catch (Exception e2) { e2.printStackTrace(); } } return null; } static class FakeDnsResolver implements DnsResolver { @Override public InetAddress[] resolve(String host) throws UnknownHostException { // Return some fake DNS record for every request, we won't be using it return new InetAddress[] { InetAddress.getByAddress(new byte[] { 1, 1, 1, 1 }) }; } } static class MyConnectionSocketFactory extends PlainConnectionSocketFactory { @Override public Socket createSocket(final HttpContext context) throws IOException { InetSocketAddress socksaddr = (InetSocketAddress) context.getAttribute("socks.address"); Proxy proxy = new Proxy(Proxy.Type.SOCKS, socksaddr); return new Socket(proxy); } @Override public Socket connectSocket(int connectTimeout, Socket socket, HttpHost host, InetSocketAddress remoteAddress, InetSocketAddress localAddress, HttpContext context) throws IOException { // Convert address to unresolved InetSocketAddress unresolvedRemote = InetSocketAddress .createUnresolved(host.getHostName(), remoteAddress.getPort()); return super.connectSocket(connectTimeout, socket, host, unresolvedRemote, localAddress, context); } } static class MySSLConnectionSocketFactory extends SSLConnectionSocketFactory { public MySSLConnectionSocketFactory(final SSLContext sslContext) { // You may need this verifier if target site's certificate is not secure super(sslContext, ALLOW_ALL_HOSTNAME_VERIFIER); } @Override public Socket createSocket(final HttpContext context) throws IOException { InetSocketAddress socksaddr = (InetSocketAddress) context.getAttribute("socks.address"); Proxy proxy = new Proxy(Proxy.Type.SOCKS, socksaddr); return new Socket(proxy); } @Override public Socket connectSocket(int connectTimeout, Socket socket, HttpHost host, InetSocketAddress remoteAddress, InetSocketAddress localAddress, HttpContext context) throws IOException { // Convert address to unresolved InetSocketAddress unresolvedRemote = InetSocketAddress .createUnresolved(host.getHostName(), remoteAddress.getPort()); return super.connectSocket(connectTimeout, socket, host, unresolvedRemote, localAddress, context); } }}

上面完成了httpclient使用socks5代理的工具类。

转载于:https://my.oschina.net/SmilePlus/blog/682198

你可能感兴趣的文章
linux samba share user
查看>>
[Asp.net]绝对路径和相对路径
查看>>
Apache Kafka框架学习
查看>>
MRC和ARC混编
查看>>
数据之一次绑定, 单向绑定, 双向绑定, INotifyPropertyChanged, 数据转换, 数据验证(转)...
查看>>
pycharm中import动态链接库pyd有错误
查看>>
Android 在通知栏实现计时功能
查看>>
N皇后问题
查看>>
Quick-cocos2d-x3.3 Study (十三)--------- 创建物理世界的边界 ( 创建一个带物理效果的线条 )...
查看>>
【乐畅】工作积累 ---- 调节音量大小 (滑动条调节音量大小并保存起来 )
查看>>
MapReduce之Map Join
查看>>
html的字符实体
查看>>
struts2
查看>>
java分页之页面分页
查看>>
浅谈C中的指针和数组(七)
查看>>
Cordova总是弹出Connection to server was Unsuccessful
查看>>
《转》 win32多线程-在MFC程序中使用多线程
查看>>
complex类
查看>>
多表查询
查看>>
Freebsd下程序随系统开机启动的方法
查看>>