究竟返回 EntityUtils.toString(response) 是啥?

Posted

技术标签:

【中文标题】究竟返回 EntityUtils.toString(response) 是啥?【英文标题】:What exactly returns EntityUtils.toString(response)?究竟返回 EntityUtils.toString(response) 是什么? 【发布时间】:2015-08-18 23:16:57 【问题描述】:

我正在做我的 API REST,我看到在很多示例中人们使用 EntityUtils.toString(response) 将他们的 response 从他们的 GETPOSTPUT 和 @ 转换为 String 987654328@ 方法。类似这样:

HttpGet method = new HttpGet(url);
method.setHeader("content-type", "application/json");
HttpResponse response = httpClient.execute(method);
String responseString = EntityUtils.toString(response.getEntity());

请避免对我说它给我一个字符串的答案

我知道它返回给我一个带有实体内容的String(在本例中为响应),但这是我的疑虑所在,因为我不确定这个String 返回的内容。我在官方文档中看到了。

读取实体的内容并将其作为字符串返回。

https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/util/EntityUtils.html#toString(org.apache.http.HttpEntity,java.lang.String)

content-type 中返回的是String 吗?

相反,我通过我的方法获得的值是 String 中返回的值吗?

我认为这是第二个问题,但我对此并不安全。而且,如果是真的,这些值是如何存储到String 中的?它们是用逗号分隔还是一些特殊字符?

提前致谢!

【问题讨论】:

【参考方案1】:

HttpEntity 表示 HTTP 响应正文的内容。 EntityUtils.toString(HttpEntity) 将该内容解释为 String 并将其返回给您。

如果你的 HTTP 响应是这样的

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: 80

<?xml version="1.0" encoding="utf-8"?>
<root>
    <nested attr="whatever" />
</root>

那么EntityUtils.toString(HttpEntity) 返回的String 将简单地包含

<?xml version="1.0" encoding="utf-8"?>
<root>
    <nested attr="whatever" />
</root>

【讨论】:

那么,String 是否忽略了 HTTP 响应的标头?只是里面的值? @Error404 HTTP 响应有一个状态行、一个标头列表和一个正文。 HttpEntity 的内容只是 HTTP 响应的正文。 所以我想Content-typeContent-Length 是标题,HTTP/1.1 200 OK 是状态行,对吧?很抱歉,我真的很陌生。【参考方案2】:

注意EntityUtils.toString的默认字符集:

使用提供的默认值以字符串形式获取实体内容 如果在实体中没有找到字符集。如果 defaultCharset 是 null,使用默认的“ISO-8859-1”。

org.apache.http.util.EntityUtils.toString(response.getEntity, "UTF-8");

【讨论】:

以上是关于究竟返回 EntityUtils.toString(response) 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

HttpEntity的结果解析为JSON

servlet等一些砸碎的

WebView,将本地 .CSS 文件添加到 HTML 页面?

PHP SPL RecursiveIterator::getChildren() 究竟返回了啥?

将 const 引用返回到本地对象时究竟会发生啥?

我无法解析从 NSURL 会话返回的 JSON。我究竟做错了啥?