如何在Java中获取没有转义序列的发布请求的响应主体?

时间:2019-05-30 08:51:51

标签: java http

我正在尝试使用以下代码将HttpResponse的响应主体转换为String:

HttpGet request = new HttpGet(url);
request.setHeader("Accept", "application/json");
response = client.execute(request);
EntityUtils.toString(response.getEntity(), standardCharsets.UTF_8.displayName());

将其转换为字符串后的预期响应如下:

{"errors": ["permission denied"]}

直到最近,此代码都可以正常工作。但是现在响应主体正在以某种方式进行修改:

{"errors":["1 error occurred:\n\t* permission denied\n\n"]}

我不明白“ 1错误发生”消息是如何插入到响应主体中的,因为邮递员中同一呼叫的响应给了我适当的响应,即:

{"errors": ["permission denied"]}

我已经彻底检查了代码,并确定没有手动插入“发生1个错误”消息。

编辑:

这些是邮递员的回复标头:

cache-control →no-store
content-length →33
content-type →application/json
date →Thu, 30 May 2019 06:52:33 GMT
status →403

这些是HttpClient调用的响应标头:

Cache-Control: no-store
Content-Type: application/json
Date: Thu, 30 May 2019 09:06:21 GMT
Content-Length: 60

唯一的区别是状态代码没有被打印。但是通过response.getStatusLine().getStatusCode()检查状态代码也会得到403。

1 个答案:

答案 0 :(得分:0)

看起来您正在使用Apache HttpClient,它不会以这种方式修改响应。肯定是服务器生成的响应。在Postman中检查您的请求配置,以查看是否还有其他标头,这些标头可能会改变服务器的行为。