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

如何基于主机名配置HttpClient5代理,实现单Spring RestClient按需路由?

实现同一Spring RestClient的动态代理逻辑

完全可以在同一个RestClient中实现这个需求,核心是通过自定义HttpClient5的路由规划器(RoutePlanner),根据目标主机名动态决定是否使用代理,无需维护两个RestClient实例。

具体实现步骤:

  1. 自定义条件路由规划器
    继承DefaultProxyRoutePlanner,重写determineRoute方法,添加主机名判断逻辑:
import org.apache.hc.client5.http.routing.DefaultProxyRoutePlanner;
import org.apache.hc.client5.http.routing.HttpRoute;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.protocol.HttpContext;

import java.io.IOException;

public class ConditionalProxyRoutePlanner extends DefaultProxyRoutePlanner {

    public ConditionalProxyRoutePlanner(HttpHost proxy) {
        super(proxy);
    }

    @Override
    public HttpRoute determineRoute(HttpHost target, HttpContext context) throws IOException {
        // 判断目标主机名是否包含"internal"
        if (target.getHostName().contains("internal")) {
            // 直接返回无代理的路由
            return new HttpRoute(target);
        }
        // 其他场景沿用默认代理逻辑
        return super.determineRoute(target, context);
    }
}
  1. 配置HttpClient与RestClient
    将自定义路由规划器绑定到HttpClient,再把该HttpClient注入RestClient:
// 初始化代理服务器配置
HttpHost proxy = new HttpHost("someproxy", 8080);
// 实例化自定义路由规划器
ConditionalProxyRoutePlanner routePlanner = new ConditionalProxyRoutePlanner(proxy);
// 构建带条件路由逻辑的HttpClient
CloseableHttpClient httpClient = HttpClients.custom()
        .setRoutePlanner(routePlanner)
        .build();

// 配置Spring RestClient,使用上述HttpClient
RestClient restClient = RestClient.builder()
        .requestFactory(new HttpComponentsClientHttpRequestFactory(httpClient))
        .build();

效果说明

配置完成后,RestClient发送请求时会自动判断目标主机:

  • 若主机名包含internal,则直接发起请求,不经过代理
  • 其他场景自动通过指定代理转发请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:33:11