Вопрос по iphone, ios5, nshttpurlresponse – Ожидаемый ответContentLength return -1

3

Здравствуйте, мне нужно создать Прогресс, когда я загружаю данные из моего веб-сервиса.

На самом деле ожидаемое содержание всегда возвращает -1.

После многих подобных проблем моя веб-служба никогда не отправляет 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=/

и вот мой код, чтобы поймать длину

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

Кто-нибудь уже видел эту проблему?

Пробовать:NSLog(@"%@", [response allHeaderFields]); и посмотреть, если объект ответа на самом деле имеетContent Length поле заголовка Alladinian
пример кода здесьstackoverflow.com/questions/23585432/… brian.clear

Ваш Ответ

2   ответа
0

похоже, что ожидаемый размер файла неизвестен, поэтому он возвращает -1.

увидеть аналогичную угрозупочему [responsepectedContentLength] всегда возвращает -1

19

Когда я спрашиваю с Curl, я могу получить длину без проблем.

Но когда я использую NSurlConnection

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

Ответ будет сжат с помощью "Gzip" (не спрашивайте меня почему). И если ответ закодирован с помощью Gzip, невозможно определить длину, тогда & quot;expectedContentLength& Quot; вернуть-1. And "Content-Length" is absent from [response allHeaderFields].

Если вы действительно хотите получить длину, вы можете просто заставить не использовать Gzip следующим образом:

[req setValue:@"" forHTTPHeaderField:@"Accept-Encoding"];
& APOS; NSURLResponse & apos; не "имеет" allHeaderFields & APOS; имущество. как узнать ожидаемую длину?
Я использую NSHTTPURLResponse, а не NSURLResponse Damien Locque

Похожие вопросы