响应预期内容长度返回 -1



您好,当我从网络服务加载数据时,我需要创建一个进度视图。

实际上,预期的 ContentLength 总是返回 -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编码的,则不可能知道长度,那么"expectContentLength"返回-1。并且 [响应所有标题字段] 中没有"内容长度"。

如果你真的想得到长度,你可以简单地强制不要像这样使用Gzip:

[req setValue:@"" forHTTPHeaderField:@"Accept-Encoding"];

我遇到了同样的问题,似乎预期的文件大小未知,这就是它返回 -1 的原因。

查看类似的威胁,为什么 [响应预期内容长度] 总是返回 -1

相关内容

  • 没有找到相关文章

最新更新