You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Apache Async HttpClient 5以使用SOCKS代理?

异步HTTP客户端配置SOCKS代理方案

完全可行,以Apache HttpClient异步版本为例,你可以通过配置异步连接管理器并注册SOCKS连接套接字工厂来实现,具体步骤如下:

  • 创建SOCKS连接套接字工厂,用于处理SOCKS代理的连接逻辑
  • 将该工厂注册到异步连接管理器的套接字工厂注册表中
  • 构建异步客户端时指定SOCKS代理地址、端口及协议类型

代码示例(Apache HttpClient 5.x)

import org.apache.hc.client5.http.async.methods.SimpleHttpRequest;
import org.apache.hc.client5.http.async.methods.SimpleHttpResponse;
import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient;
import org.apache.hc.client5.http.impl.async.HttpAsyncClients;
import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManager;
import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManagerBuilder;
import org.apache.hc.client5.http.socket.ConnectionSocketFactory;
import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory;
import org.apache.hc.client5.http.socket.SocksConnectionSocketFactory;
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.config.RegistryBuilder;

import java.util.concurrent.Future;

public class AsyncSocksProxyExample {
    public static void main(String[] args) throws Exception {
        // 创建SOCKS连接套接字工厂
        final SocksConnectionSocketFactory socksSocketFactory = new SocksConnectionSocketFactory();

        // 配置异步连接管理器,注册各类套接字工厂
        final PoolingAsyncClientConnectionManager connManager = PoolingAsyncClientConnectionManagerBuilder.create()
                .setSocketFactoryRegistry(RegistryBuilder.<ConnectionSocketFactory>create()
                        .register("http", PlainConnectionSocketFactory.getSocketFactory())
                        .register("https", SSLConnectionSocketFactory.getSocketFactory())
                        .register("socks", socksSocketFactory)
                        .build())
                .build();

        // 构建异步HTTP客户端,指定SOCKS代理
        try (CloseableHttpAsyncClient httpAsyncClient = HttpAsyncClients.custom()
                .setConnectionManager(connManager)
                .setProxy(new HttpHost("socks-proxy-host", 1080, "socks")) // 替换为你的代理地址和端口
                .build()) {

            httpAsyncClient.start();

            // 发送异步请求示例
            final SimpleHttpRequest request = SimpleHttpRequest.get("https://example.com");
            final Future<SimpleHttpResponse> future = httpAsyncClient.execute(request, null);
            final SimpleHttpResponse response = future.get();

            System.out.println("Response status: " + response.getCode());
        }
    }
}

关键说明

  • 异步客户端的连接管理依赖PoolingAsyncClientConnectionManager,必须将SOCKS工厂注册到工厂注册表中,确保客户端能识别socks协议的代理
  • 若你的SOCKS代理需要认证,可以在创建SocksConnectionSocketFactory时传入自定义的CredentialsProvider,或者通过重写工厂的认证逻辑实现
  • 不同版本的Apache HttpClient(如4.x)类名略有差异,但核心逻辑一致:注册SOCKS工厂 + 指定代理配置

内容的提问来源于stack exchange,提问作者anton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:31:06