2012-06-21 30 views
3

你好,我需要創建一個progressView,當我從我的web服務加載數據。response expectedContentLength return -1

實際上expectedContentLength總是返回-1。

看了很多相似的問題後,它看起來像我的web服務永遠不會發送Content-Length :.

然後我請與捲曲,這裏是結果:

< 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; 
} 

任何人都已經看這個問題?

+0

嘗試:'的NSLog(@ 「%@」,[響應allHeaderFields]);'看如果響應對象實際上具有「Content Length」標題字段。 – Alladinian

+0

這裏的代碼示例http://stackoverflow.com/questions/23585432/totalbytesexpectedtowrite-is-1-in-nsurlsessiondownloadtask/33372970#33372970 –

回答

19

好,我在這裏要自己解決是我的真正的問題和解決方案:

當我問卷曲我能得到的長度沒有問題。

但是當我使用NSURLConnection的

NSURLConnection *c = [[NSURLConnection alloc] initWithRequest:req delegate:self]; 

響應將「壓縮」被壓縮(不要問我爲什麼)。如果響應使用Gzip編碼,則無法知道長度,則「expectedContentLength」返回-1。 並且「內容長度」在[回覆全部頭字段]中不存在。

如果你真的想要得到的長度,你可以簡單地強制不能用gzip這樣的:

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

'NSURLResponse'沒有'allHeaderFields'屬性。我怎麼知道預期的長度? –

+0

我正在使用NSHTTPURLResponse,而不是NSURLResponse –