gpt4 book ai didi

java - 如何将 Socks 5 代理与 Apache HTTP Client 4 一起使用?

转载 作者:太空狗 更新时间:2023-10-29 22:36:45 24 4
gpt4 key购买 nike

我正在尝试创建通过SOCKS5 代理通过Apache HC 4 发送HTTP 请求的应用程序。我不能使用应用程序全局代理,因为应用程序是多线程的(我需要为每个 HttpClient 实例使用不同的代理)。我没有发现 SOCKS5 与 HC4 一起使用的示例。我该如何使用它?

最佳答案

SOCK 是 TCP/IP 级别的代理协议(protocol),而不是 HTTP。开箱即用的 HttpClient 不支持它。

可以自定义 HttpClient 以使用自定义连接套接字工厂通过 SOCKS 代理建立连接

编辑:更改为 SSL 而不是普通套接字

Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.INSTANCE)
.register("https", new MyConnectionSocketFactory(SSLContexts.createSystemDefault()))
.build();
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(reg);
CloseableHttpClient httpclient = HttpClients.custom()
.setConnectionManager(cm)
.build();
try {
InetSocketAddress socksaddr = new InetSocketAddress("mysockshost", 1234);
HttpClientContext context = HttpClientContext.create();
context.setAttribute("socks.address", socksaddr);

HttpHost target = new HttpHost("localhost", 80, "http");
HttpGet request = new HttpGet("/");

System.out.println("Executing request " + request + " to " + target + " via SOCKS proxy " + socksaddr);
CloseableHttpResponse response = httpclient.execute(target, request, context);
try {
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
EntityUtils.consume(response.getEntity());
} finally {
response.close();
}
} finally {
httpclient.close();
}

static class MyConnectionSocketFactory extends SSLConnectionSocketFactory {

public MyConnectionSocketFactory(final SSLContext sslContext) {
super(sslContext);
}

@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);
}

}

关于java - 如何将 Socks 5 代理与 Apache HTTP Client 4 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22937983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com