Dam*_*que 3 iphone ios5 nshttpurlresponse
你好,我需要在从我的webservice加载数据时创建progressView.
实际上expectedContentLength总是返回-1.
看了很多类似的问题后,我的webservice似乎永远不会发送Content-Length:.
然后我用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=/
Run Code Online (Sandbox Code Playgroud)
这是我的代码来捕捉长度
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;
}
Run Code Online (Sandbox Code Playgroud)
任何人都已经看到了这个问题?
Dam*_*que 19
好的,我自己解决这里是我真正的问题和解决方案:
当我问Curl我可以得到长度没问题.
但是当我使用NSurlConnection时
NSURLConnection *c = [[NSURLConnection alloc] initWithRequest:req delegate:self];
Run Code Online (Sandbox Code Playgroud)
响应将使用"Gzip"进行压缩(不要问我为什么).如果响应是用Gzip编码的,则无法知道长度,然后" expectedContentLength "返回-1.并且[response allHeaderFields]中没有"Content-Length" .
如果你真的想要获得长度,你可以简单地强制不要像这样使用Gzip:
[req setValue:@"" forHTTPHeaderField:@"Accept-Encoding"];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4616 次 |
| 最近记录: |