我正在使用这个问题的源代码如何异步执行httprequest并显示下载响应的进度 https://stackoverflow.com/questions/9594318/how-to-asynchronous-perform-a-httprequest-and-show-the-progress-of-downloading-t为了获取网页的 html 源并显示进度条,其中包含到目前为止下载的数据以及页面的总大小。
该特定代码实际上在 ICS 4.0.3 上不起作用,因为 clHeaders[0] 不指向任何内容,并且在索引 0 处引发名为 ArrayIndexOutOfBounds 的异常,因为服务器响应中省略了 Content-Length 标头。我尝试使用 getContentLength 以防出现问题 - 它返回负值 -1 然后我迭代所有标头,但 Content-Length 不存在。删除这些位后,代码工作正常,并获取网页,写入文件,并显示正在下载的大小,但显然不是最终大小,直到我实际下载全部内容。
对于原因我只有三个想法:
- 我没有发送内容长度标头,因此我也没有收到内容长度标头 - 但这听起来不对。另外,我不知道 HttpClient 是否没有在后台发送。
- 我在另一个问题中读到,如果服务器的响应是流式或分块式的,那么 getContentLength 可以返回 -1。
- 压缩包?但我不知道如何禁用它或者它是否首先启用
如果您认为是服务器损坏了,我尝试了包括 Google 在内的许多网站,但仍然没有任何 Content-Length 标头。
Content-Length 标头是可选的,它主要仅对 HEAD 请求或非常大的数据有用,如果内容太大,客户端可能会决定中止请求。所以是的,内容长度并不总是存在。除此之外,您通常应该通过读取数据来获取内容长度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)