Spring WebClient发起GET请求返回“Moved Permanently”重定向错误如何解决
WebClient请求VPN内网地址返回301跳转问题排查方案
- 排查JVM代理配置
WebClient默认会读取JVM的系统代理参数,若JVM配置了公网代理,请求会走公网链路,表现和关闭VPN的场景完全一致。可在启动程序时添加如下VM参数清空代理配置测试:
-Dhttp.proxyHost= -Dhttp.proxyPort= -Dhttps.proxyHost= -Dhttps.proxyPort=
可在代码中添加日志确认当前代理配置:
System.out.println("HTTP代理地址:" + System.getProperty("http.proxyHost")); System.out.println("HTTPS代理地址:" + System.getProperty("https.proxyHost"));
另外需检查IDE的启动配置是否默认注入了代理参数。
排查本地域名解析配置
比对你和同事的hosts文件,以及ping目标域名返回的IP是否一致,若本地hosts错误将域名解析到公网IP,也会触发301跳转。补全请求头模拟浏览器行为
部分内网服务会校验User-Agent、Accept等请求头,可将WebClient的请求头配置为和浏览器一致测试:
WebClient webClient = WebClient.builder().build(); Mono<String> stringMono = webClient.get() .uri(urlWhichAvailableOnlyUnderVPN) // 替换为你本地浏览器的实际User-Agent值 .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36") .header("Accept", "application/xml, text/xml, */*") .retrieve() .bodyToMono(String.class); stringMono.subscribe(response -> System.out.println("RESPONSE: " + response));
- (可选)配置自动跟随重定向
若确认需要跟随跳转,可显式配置HttpClient开启重定向跟随:
WebClient webClient = WebClient.builder() .clientConnector(new ReactorClientHttpConnector( HttpClient.create().followRedirect(true) )) .build();
内容的提问来源于stack exchange,提问作者Aslan
相关产品推荐
相关产品推荐

