Rest Assured调用GET接口返回502但浏览器访问正常问题排查
问题排查方向
- 请求头缺失/不匹配
浏览器发送请求时会自动携带User-Agent、Accept、Host这类默认请求头,多数服务端/反向代理会对这类头做校验,缺少预期头的请求会被转发到无效上游节点,返回502。你可以先把Rest Assured的请求头补成和浏览器请求完全一致的,最常见的是补全User-Agent字段,示例代码如下:
RestAssured.baseURI = "https://abc.xyz.co/"; RequestSpecification request = RestAssured.given(); Response response = request // 可从浏览器控制台的请求头中复制实际的User-Agent值替换 .header("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") .queryParam("route", "efg/api/jkl") .queryParam("key","8454jdgdkjf948754") .queryParam("source","android") .queryParam("user_id","44") .get("/index.php"); System.out.println(response.getStatusCode());
- 路径拼接斜杠错误
你配置的baseURI末尾已经带了斜杠,get方法传入的路径又以斜杠开头,部分版本的Rest Assured拼接后会生成https://abc.xyz.co//index.php这类带双斜杠的地址,反向代理无法匹配到正确路由就会返回502。可以选择任意一种方式修正:- 去掉baseURI末尾的斜杠:
RestAssured.baseURI = "https://abc.xyz.co"; - 去掉get方法路径开头的斜杠:
.get("index.php");
- 去掉baseURI末尾的斜杠:
- 请求地址校验
开启Rest Assured的请求日志,打印完整的请求地址、参数、头信息,和浏览器实际发送的请求做对比,确认二者完全一致。开启日志的代码如下:
RequestSpecification request = RestAssured.given().log().all();
如果实际项目的参数包含特殊字符,Rest Assured默认会做URL编码,若服务端未做兼容也可能导致路由失败,对比请求地址可以快速定位这类问题。
- 代理配置不一致
如果浏览器配置了系统代理,而Java运行环境没有配置对应代理,也会导致请求被转发到错误网关,返回502。可以检查Java进程的代理配置,或者在Rest Assured中显式配置和浏览器一致的代理规则。
内容的提问来源于stack exchange,提问作者Iamarjun
相关产品推荐
相关产品推荐

