Java HttpClient實現socks代理的示例代碼
HttpClient 實現 socks 代理
使用的環境
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.4.1</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.1</version> </dependency>
代碼及 ConnectionSocketFactory 實現類
package xxx;import com.lucas.admin.util.HttpClientUtil;import org.apache.http.HttpEntity;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.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 java.io.IOException;import java.net.InetSocketAddress;import java.net.Proxy;import java.net.Socket;/** * @author kzcming * @since 2020/11/19 15:51 */public class Test { public static void main(String[] args) throws Exception { test('https://www.cnblogs.com/'); } public static void test(String url) throws Exception{ // ConnectionSocketFactory注冊 Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory>create().register('http', new MyConnectionSocketFactory()).register('https',new MySSLConnectionSocketFactory()).build(); // HTTP客戶端連接管理池 PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(reg); CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(connManager).build(); try { // socks代理地址 , socks 地址和端口,這里隨便寫了一個1008 InetSocketAddress socksaddr = new InetSocketAddress('你的地址', 1008); HttpClientContext context = HttpClientContext.create(); context.setAttribute('socks.address', socksaddr); // 請求目標 HttpGet request = new HttpGet(url); System.out.println('----------------------------------------'); System.out.println('執行請求 :' + request.getRequestLine()); System.out.println('通過代理: ' + socksaddr); System.out.println('----------------------------------------'); CloseableHttpResponse response = httpclient.execute(request, context); try {HttpEntity entity = 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 工廠 */ static class MyConnectionSocketFactory extends PlainConnectionSocketFactory { @Override public Socket createSocket(final HttpContext context) throws IOException { InetSocketAddress socksaddr = (InetSocketAddress) context.getAttribute('socks.address'); // socket代理 Proxy proxy = new Proxy(Proxy.Type.SOCKS, socksaddr); return new Socket(proxy); } } /** * 實現 https 鏈接的socket 工廠 */ static class MySSLConnectionSocketFactory extends SSLConnectionSocketFactory { public MySSLConnectionSocketFactory() { super(SSLContexts.createDefault(), getDefaultHostnameVerifier()); } @Override public Socket createSocket(final HttpContext context) throws IOException { InetSocketAddress socksaddr = (InetSocketAddress) context.getAttribute('socks.address');// // socket代理 Proxy proxy = new Proxy(Proxy.Type.SOCKS, socksaddr); return new Socket(proxy); } }}
以上就是Java HttpClient 實現 socks 代理的示例代碼的詳細內容,更多關于Java HttpClient 實現 socks 代理的資料請關注好吧啦網其它相關文章!
相關文章:
1. Express 框架中使用 EJS 模板引擎并結合 silly-datetime 庫進行日期格式化的實現方法2. 一篇文章帶你了解JavaScript-對象3. Java構建JDBC應用程序的實例操作4. IntelliJ IDEA設置條件斷點的方法步驟5. IDEA的Mybatis Generator駝峰配置問題6. Python使用oslo.vmware管理ESXI虛擬機的示例參考7. javascript設計模式 ? 建造者模式原理與應用實例分析8. Spring應用拋出NoUniqueBeanDefinitionException異常的解決方案9. python flask框架快速入門10. ThinkPHP5 通過ajax插入圖片并實時顯示(完整代碼)
