AddValue NSMutableURLRequest не работает? - PullRequest
1 голос
/ 04 ноября 2011

Это для iOS:

Я пытаюсь возобновить загрузку файла с ранее прерванного соединения.Чтобы сделать это, я просто использую поле диапазона HTTP-заголовка, чтобы установить начальную точку запроса на загрузку следующим образом:

NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString: url]];


// Find out if file already exists.
if([[NSFileManager defaultManager] fileExistsAtPath:filename])
{
    NSError *error;
    unsigned long long currentSize =[[[NSFileManager defaultManager]  attributesOfItemAtPath:filename error:&error] fileSize];

    NSLog(@"File exists, size:%llu",currentSize);

    // If the file was not completly downloaded -> resume download
    [urlRequest addValue:[NSString stringWithFormat:@"bytes=%llu-",currentSize] forHTTPHeaderField:@"Range"];

    //[urlRequest setValue:[NSString stringWithFormat:@"%llu-",currentSize] forHTTPHeaderField:@"range"];


}

Как вы можете видеть в вышеприведенном сценарии, я также попытался использовать setValue.В обоих случаях кажется, что поле «Диапазон» добавлено, но не работает.Файл всегда отправляется со смещением байта 0. Когда я делаю NSLog (@ "% @", [urlRequest allHTTPHeaderFields]), я получаю значение диапазона, которое устанавливается, но оно все равно не работает:

При выполнении NSLog (@ "% @", [urlRequest allHTTPHeaderFields]) отображаются: {Range = "bytes = 13207107-";} или, в случае закомментированного кода setValue: {Range = "13207107 -";}.

Я подумал, что, возможно, HTTP-сервер не поддерживает диапазон, но ИТ-специалист заверил меня, что это ...

Кто-нибудь видит какие-либо проблемы в коде выше?Есть ли простой способ проверить, поддерживает ли веб-сервер поле диапазона?

Спасибо!

1 Ответ

1 голос
/ 04 ноября 2011

Я бы протестировал сервер независимо от вашего приложения.Формат запроса кажется правильным.Самый простой способ определить это - использовать curl, поставляемый с OSX:

curl -sv -H 'Range: bytes=100-500' http://www.google.com/intl/en_com/images/srpr/logo3w.png > /dev/null

Если вы не видите Content-Range в заголовке ответа и соответствующем заголовке Content-Length (401 вслучае), вы будете знать, что сервер виноват.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...