究竟返回 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
从他们的 GET
、POST
、PUT
和 @ 转换为 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-type
和Content-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) 是啥?的主要内容,如果未能解决你的问题,请参考以下文章
WebView,将本地 .CSS 文件添加到 HTML 页面?