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

Spring Boot3+Java21下HttpClient5 GET请求报Invalid Proxy异常求助

问题分析与解决方案

核心问题原因

你遇到的"Invalid Proxy"异常,本质是Apache HttpClient 5.2.2的默认配置会自动检测系统层面的代理设置——即使你没有手动配置代理,Java虚拟机的系统属性(如http.proxyHost、https.proxyHost)可能存在残留值,或者JVM自动获取了操作系统的全局代理,而GET请求的代理校验逻辑比PATCH请求更严格,导致无有效代理时抛出异常。

另外,直接使用Apache HttpClient的HttpGet也触发相同异常,说明问题根源在HttpClient5本身的默认配置,和RestTemplate无关。

解决方案

1. 显式禁用代理自动检测

创建HttpClient时,手动配置禁用代理自动检测,避免它读取系统代理设置:

CloseableHttpClient httpClient = HttpClients.custom()
        .setRoutePlanner(new DefaultRoutePlanner(DefaultSchemePortResolver.INSTANCE) {
            @Override
            protected HttpHost determineProxy(HttpHost target, HttpRequest request, HttpClientContext context) throws HttpException {
                // 直接返回null,禁用代理
                return null;
            }
        })
        .build();

如果和RestTemplate结合使用,需要把这个自定义HttpClient配置到RestTemplate的请求工厂中:

HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
RestTemplate restTemplate = new RestTemplate(factory);

2. 清除系统代理属性

在应用启动时,显式清除可能存在的代理系统属性,可通过JVM启动参数添加:

-Dhttp.proxyHost= -Dhttp.proxyPort= -Dhttps.proxyHost= -Dhttps.proxyPort=

也可以在代码启动初期执行清除:

System.clearProperty("http.proxyHost");
System.clearProperty("http.proxyPort");
System.clearProperty("https.proxyHost");
System.clearProperty("https.proxyPort");

3. 尝试升级HttpClient5版本

5.2.2可能存在无代理场景下的逻辑bug,尝试升级到最新稳定版(如5.3.x),大概率能修复该问题。

关于GitHub链接404的问题

你访问的5.1.x分支下的示例文件已被移除或路径变更,无需纠结该链接,直接查看Apache HttpClient5对应版本的官方文档即可获取配置示例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:46:05