java - HttpUrlConnection 读取分块响应

标签 java android http

我正在做一个项目,我必须使用 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/

相关文章:

java - Knight's Tour 代码陷入无限循环,没有达成解决方案

android - Unresolved reference : isInitialized on lateinit property

java - 如何从我的 Android 应用程序中的另一个 Activity 访问主 webview 实例?

java - 如何从实时数据中删除观察者,以便在导航回 fragment 时不会显示两次

java - 阻止 Apache HttpClient 4 访问特定路由

php - 在 PHP 中强制下载图像。在本地工作但在实时 Linux 服务器上中断

java - 如何解析字符串并获取特定值

java - 将圆圈移动到随机位置

java - 将多个 xml 对象传递给 jax-rs 服务

c - C 中的 HTTP 请求语法