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

HttpClient创建后设置代理失效问题排查

Reactor Netty HttpClient代理配置失效问题分析与解决

问题现象

链式调用.proxy()配置代理时,HttpClient可正常通过代理访问目标站点;但先创建HttpClient实例,再通过条件语句调用.proxy()配置代理时,代理完全失效,请求直接发起DNS解析导致超时错误。

问题根源

Reactor Netty的HttpClient是不可变对象,所有配置类方法(包括.proxy())执行后都会返回一个新的HttpClient实例,原实例的配置不会被修改。

在proxyFails方法中,调用httpClient.proxy(...)后没有将返回的新实例重新赋值给原变量,后续传入ReactorClientHttpConnector的还是最初创建的未配置代理的HttpClient实例,自然无法走代理。

修复代码

修改proxyFails方法,将.proxy()返回的新实例赋值给原变量即可:

@Test
public void proxyFailsFixed() {

  HttpClient httpClient = HttpClient.create();

  if(true)
  {
    // 将proxy()返回的新实例重新赋值给httpClient变量
    httpClient = httpClient.proxy(proxy ->
        proxy.type(ProxyProvider.Proxy.HTTP)
            .host("proxyServerURL")
            .port(3128)
    );
  }

  WebClient client = WebClient.builder()
      .baseUrl("https://www.cisco.com")
      .clientConnector(new ReactorClientHttpConnector(httpClient))
      .exchangeStrategies(ExchangeStrategies.builder().codecs(it->
          it.defaultCodecs().maxInMemorySize(2000000)).build())
      .build();

  String response = client.get()
      .uri("/")
      .retrieve()
      .bodyToMono(String.class)
      .block();

  assertNotNull(response);

}

验证说明

修改后,条件语句中配置的代理会被应用到新的HttpClient实例上,后续WebClient使用的是配置好代理的实例,请求会正常通过代理转发,避免直接发起DNS解析导致的超时问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:35:04