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

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, br
  • Connection: 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:05:08