我正在做一个项目,我必须使用 HttpUrlConnection (Android~) 来读取输入流。
事实证明,当我读取输入流时,数据格式不正确并且与原始内容(由服务器发送)相比具有更大的大小。现在,服务器响应 header 包含 "Content-Length" 和 "Transfer-Encoding: chunked",据我所知这是一个问题,因为它们都不应该共存。
除此之外,从 HttpUrlConnection 接收的输入流包含所有正文内容(带有 block 偏移信息)。
我有两个问题:
- HttpUrlConnection 不应该处理分块数据吗?
- 如何从没有分块信息的输入流中获取数据?
最佳答案
HttpUrlConnection 应该处理分块数据,你是对的。您看到这些 header 的事实意味着它们可能在某处格式错误,并且已经发送了 \n\n
或 \r\n\r\n
,因此 HttpUrlConnection 将其视为实际传输的一部分。
如果您想获取原始数据,请使用套接字并连接到正确端口上的 url(对于 ssl 可能是 80、443)
编辑:java.net.URLConnection connect() 方法下的状态
Interact with the resource; query header fields and contents.
这表明 URLConnection 在从提供的任何类型的阅读器中读取任何内容之前查询标题信息。请原谅我第一次没有包括这个。
关于java - HttpUrlConnection 读取分块响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23510742/