使用Unirest发起GET API请求时状态码200但无响应体
问题排查与解决方案
你遇到的情况是Unirest发起GET请求返回200状态码但响应体为空,相同参数的curl请求却能正常获取JSON响应,以下是几个针对性的排查和解决方向:
1. 开启自动响应压缩处理
多数API会返回gzip压缩的响应,curl默认会自动解压,但Unirest默认可能未开启该功能。在发起请求前添加以下配置:
Unirest.config().enableAutomaticResponseCompression(true);
2. 改用JSON响应解析方式
尝试替换asString()为asJson(),直接解析JSON响应,避免字符串处理环节的潜在问题:
HttpResponse<JsonNode> response = Unirest.get(url) .header("Authorization", "Bearer " + access_token) .header("Cache-Control", "no-cache, no-store, must-revalidate") .header("Pragma", "no-cache") .header("Expires", "0") .header("Accept", "application/json") .asJson(); String responseBody = response.getBody().toString();
3. 对齐curl的请求头
curl有默认的User-Agent等请求头,Unirest的默认请求头可能与curl存在差异,导致API返回空内容。可以添加与curl一致的User-Agent头(替换为你实际使用的curl版本):
.header("User-Agent", "curl/7.68.0")
同时打印Unirest发送的所有请求头,与curl的请求头逐一对比,确保完全一致。
4. 打印响应头排查问题
获取响应后打印所有响应头,确认响应是否真的携带内容:
logger.log(Level.ALL, "Response Headers: " + response.getHeaders());
如果响应头中Content-Length为0,需排查API侧问题;如果存在Content-Encoding: gzip,则说明是压缩未处理的问题。
5. 升级Unirest版本
旧版本Unirest可能存在响应读取的bug,尝试升级到最新稳定版本,例如Maven依赖配置:
<dependency> <groupId>com.konghq</groupId> <artifactId>unirest-java</artifactId> <version>3.14.1</version> <!-- 替换为最新版本号 --> </dependency>
内容的提问来源于stack exchange,提问作者Sanjay N
相关产品推荐
相关产品推荐

