HttpURLConnection.getContentLength()为-1 解决方法

来源:互联网 发布:知乎 大野智 编辑:程序博客网 时间:2024/06/05 10:54

初始化线程里 length=conn.getContentLength();返回值一直是-1

注意1

getContentLength()方法是是从请求体中获取数据,而GET是URL明文,API是这样说的:Returns the length, in bytes, of the request body and made available by the input stream, or -1 if the length is not known ir is greater than Integer.所有会一直返回回-1

conn.setRequestMethod("POST");//把提交从GET改为POST

注意2

最近在做一个下载平台,用到多线程下载和断点续传功能,当我获取文件大小getContentLength()的时候,返回结果是-1。文件下载是没问题的,但是大小却不正常,用模拟器获取getContentLength()是正常的,但是真机却返回-1了,模拟器是低版本运行,于是我就猜想是版本问题,果然2.2版本以上HttpURLConnection跟服务交互采用了"gzip"压缩:参考api:By default, this implementation of HttpURLConnection requests that servers use gzip compression. Since getContentLength() returns the number of bytes transmitted, you cannot use that method to predict how many bytes can be read from getInputStream(). Instead, read that stream until it is exhausted: whenread() returns -1. 

取消办法这http request的head中设置如下参数即可:
connection.setRequestProperty("Accept-Encoding", "identity"); 


1 0
原创粉丝点击