gpt4 book ai didi

android - 为什么在使用 HttpClient 时服务器响应中省略了 Content-Length header ?

转载 作者:太空狗 更新时间:2023-10-29 15:13:22 24 4
gpt4 key购买 nike

我正在使用这个问题的源代码How to asynchronous perform a httprequest and show the progress of downloading the response为了获取网页的 html 源并显示进度条,其中包含到目前为止下载的数据以及页面的总大小。

该特定代码在 ICS 4.0.3 上实际上不起作用,因为 clHeaders[0] 没有指向任何东西,并且在索引 0 处引发了一个称为 ArrayIndexOutOfBounds 的异常,因为服务器响应中省略了 Content-Length header 。我尝试使用 getContentLength 以防出现问题 - 它返回负值 -1 然后我遍历所有 header 并且 Content-Length 不存在。删除这些位后,代码工作正常,并获取网页,写入文件并显示正在下载的大小,但显然不是最终大小,直到我真正下载它。

关于原因我只有三个想法:

  1. 我没有发送 Content-Length header ,因此我也没有收到 - 但这听起来不对。另外,我不知道 HttpClient 是否没有在后台发送一个。
  2. 我在另一个问题中读到,如果服务器的响应是流式或分块式的,则 getContentLength 可以返回 -1。
  3. 压缩?但我不知道如何禁用它,或者是否首先启用了它

如果您认为是服务器出了问题,我尝试了很多网站,包括 Google,但仍然没有任何 Content-Length header 。

最佳答案

Content-Length header 是可选的,它主要仅对 HEAD 请求或非常大的数据有用,如果内容太大,客户端可能会决定要中止请求。所以是的,Content-Length 并不总是存在。除此之外,您通常应该通过读取数据来获取内容长度。

关于android - 为什么在使用 HttpClient 时服务器响应中省略了 Content-Length header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14903404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com