Rest Assured返回编码响应,Postman请求同一接口却正常
问题:Rest Assured请求返回编码内容,Postman请求同一接口却正常
问题详情
用Rest Assured发送GET请求获取JSON响应时,部分字段呈现编码后的乱码形式;但用Postman请求同一个URL,能拿到正常的未编码JSON响应。
我的Rest Assured代码
RestAssured.baseURI="https://api.instantwebtools.net/v1/"; String GetResponse=given().contentType("application/json; charset=utf-8") .when().get("airlines") .then().assertThat().statusCode(200).and().contentType("application/json; charset=utf-8").extract().response().asString(); System.out.println(GetResponse);
Rest Assured返回的编码输出
UJhVJKwXQk7LMTkgimTZXEncZQCAAGlcdkJMrIgES9R3E8wGh6E6AUVcW4LQaABDzCwE2YyrCYCAEARLyJLaJYUgQCApMGK4gHcTbEMILieQNoV7lBcTYA2AD2JcibsIvmsF7maKRQwTALkDEArgMLpEtiSbAfMF7jUR2Ckl1GshodgEkFigYE2AAAQIYWAQDyC2QCGshDAYCHsQFw1DYTYDC5IFDbuKw0mJvl1AEgk0tzOVRvQqnQq1tI5dWBLqPYdOlVqv2I373odtHAwjnP2n+B2wp5aEvJZHDSwMUrz9p/gdCo2VkrI64wK5EZ1rHLTTi7M6IxTVxSgTGTi7Mg1sMItNDsAgAAAAAAAAABDABAAAAhisAAAwJCxVhAQ4jjNxdmUS0BqmpLITRkm4s1jNSWYCsIpiALjExIBhcAAAAEArAUSwP/9k=","slogan":"I am from india","head_quaters":"bombay","website":"hrp.gov","established":"2001"},{"id":1454889993,"name":"9","country":"Sri Lanka","logo":"https://upload.wikimedia.org/wikipedia/en/thumb/9/9b/Qatar_Airways_Logo.svg/sri_lanka.png","slogan":"From Sri Lanka","head_quaters":"Katunayake, Sri Lanka","website":"www.srilankaairways.com","established":"1990"}
Postman返回的正常输出
[ { "id": 999999, "name": "qwertyu", "country": "asdfghj", "logo": "sdfgh", "slogan": "zxcvbnm", "head_quaters": "hsdfghj", "website": "zxcvbnm,", "established": "45645" }, { "id": 2, "name": "Air India", "country": "India", "logo": "https://upload.wikimedia.org/wikipedia/en/thumb/e/e3/Air_India_Logo.svg/250px-Air_India_Logo.svg.png", "slogan": "Your Palace in the Sky", "head_quaters": "Airlines House, New Delhi, India", "website": "https://www.airindia.in", "established": "1990" } ]
Postman中的请求头
根据截图,Postman携带的核心请求头包括:
Accept: */*Accept-Encoding: gzip, deflate, brConnection: keep-alive- 浏览器默认的
User-Agent头
原因分析
核心问题是Rest Assured与Postman的请求头不一致:服务器会根据Accept-Encoding头判断是否返回压缩响应。Postman默认携带了压缩编码标识,服务器返回gzip压缩内容后,Postman自动完成了解码;而你的Rest Assured代码既没加对应请求头,也没启用自动解码,导致直接输出了压缩后的二进制内容,表现为编码乱码。
解决方案
方案1:添加与Postman一致的请求头
手动添加关键请求头,让Rest Assured请求和Postman对齐:
RestAssured.baseURI="https://api.instantwebtools.net/v1/"; String GetResponse=given() .contentType("application/json; charset=utf-8") .header("Accept-Encoding", "gzip, deflate, br") .header("Accept", "*/*") .when().get("airlines") .then().assertThat().statusCode(200).and().contentType("application/json; charset=utf-8") .extract().response().asString(); System.out.println(GetResponse);
方案2:启用Rest Assured自动解码功能
全局或单个请求开启压缩响应自动解码:
// 全局配置:启用所有压缩格式的自动解码 RestAssured.config = RestAssured.config().decoderConfig(decoderConfig().enableContentDecoding(true)); // 单个请求配置 String GetResponse=given() .config(RestAssured.config().decoderConfig(decoderConfig().enableContentDecoding(true))) .contentType("application/json; charset=utf-8") .when().get("airlines") .then().assertThat().statusCode(200).and().contentType("application/json; charset=utf-8") .extract().response().asString();
两种方案任选其一,一般添加请求头并启用解码即可解决问题。
内容的提问来源于stack exchange,提问作者parker
相关产品推荐
相关产品推荐

