RestAssured自动化带授权POST API返回401/403问题求助
问题
使用RestAssured自动化携带Authorization的POST API请求时,返回401状态码(预期为201),后续尝试又得到403状态码,但该API在Postman中可正常运行并返回201状态码。相关代码如下:
RestAssured.baseURI="http://restapi.adequateshop.com/api/users"; String jsonBody = "{\"tourist_name\":\"Mike\",\"tourist_email\":\"mxyz5676@gmail.com\",\"tourist_location\":\"Paris\"}"; String token="433tc02b-b5c1-4bd8-836a-618cdc31c492"; Response response = RestAssured.given() .header("Authorization", "Bearer " + token) .header("User-Agent", "PostmanRuntime/7.32.3") .header("Accept", "*/*") .header("Connection", "keep-alive") .body(jsonBody) .post("http://restapi.adequateshop.com/api/users"); int statusCode = response.getStatusCode(); String responseBody = response.getBody().asString(); System.out.println("Response Code: " + statusCode); System.out.println("Response Body: " + responseBody);
解决方案
- 核对Token的有效性与格式:
确认代码中的Token与Postman使用的完全一致,避免复制时出现空格、换行或字符错误。虽然代码中Bearer与Token的空格处理正确,但仍需检查Token本身是否未过期、权限是否匹配当前接口。 - 补充必要的请求头:
你的请求体是JSON格式,但代码中未添加Content-Type: application/json请求头,服务端可能无法正确解析请求体,进而导致鉴权逻辑异常。在given()链中添加以下代码即可:.header("Content-Type", "application/json") - 统一请求URL写法:
代码中已设置baseURI,但post()方法又传入了完整URL,建议改为.post("/")或直接.post(),避免URL拼接时出现潜在问题。 - 更换有效Token重试:
403状态码通常表示Token权限被封禁或失效,可能是前期错误请求触发了服务端的防护机制,重新获取一个新的有效Token再测试。 - 对比Postman生成的RestAssured代码:
在Postman中找到对应请求,点击「代码」按钮,选择Java - RestAssured格式,直接对比生成的代码与你自己的代码,快速找出请求头、请求体或其他配置的差异。
内容的提问来源于stack exchange,提问作者Meghana Ingale
相关产品推荐
相关产品推荐

