您好,当我从网络服务加载数据时,我需要创建一个进度视图。
实际上预期的内容长度总是返回-1。
在查看了很多相似问题之后,看起来我的网络服务从未发送内容长度:。
然后我检查 CURL,结果如下:
< HTTP/1.1 200 OK
< Date: Thu, 21 Jun 2012 10:04:39 GMT
< Server: Apache/2.2.16 (Debian)
< X-Powered-By: PHP/5.3.3-7+squeeze9
< cache-control: no-cache
< Vary: Accept-Encoding
< Content-Type: text/html; charset=UTF-8
< Content-Length: 3239
< Connection: Keep-Alive
< Set-Cookie: PHPSESSID=u4o4i9dofdgnkfmtnf163635j6; path=/
这是我捕获长度的代码
long long expectDataSize;
long long currentDataSize;
....
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse *)response
{
NSLog(@"expect content length %lld", [response expectedContentLength]);
expectDataSize = [response expectedContentLength];
currentDataSize = 0;
}
有人已经看到这个问题了吗?
好吧,我自己解决了,这是我真正的问题和解决方案:
当我用 Curl 询问时,我可以得到长度,没有问题。
但是当我使用 NSurlConnection 时
NSURLConnection *c = [[NSURLConnection alloc] initWithRequest:req delegate:self];
响应将使用“Gzip”进行压缩(不要问我为什么)。如果响应是用 Gzip 编码的,则不可能知道长度,那么“预期内容长度“ 返回-1。
并且“内容长度”不存在[响应所有标题字段].
如果你真的想获得长度,你可以简单地强制不使用 Gzip,如下所示:
[req setValue:@"" forHTTPHeaderField:@"Accept-Encoding"];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)