2011-11-03 26 views
1

這是用於iOS的:NSMutableURLRequest的addValue不起作用?

我正嘗試從先前中斷的連接恢復文件下載。要做到這一點,我簡單地使用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"]; 


} 

正如你可以在上面的SRC看,我也用的setValue嘗試。在這兩種情況下,似乎添加了「範圍」字段但不起作用。該文件總是從字節偏移量0發送。當我做一個NSLog(@「%@」,[urlRequest allHTTPHeaderFields]),我得到的範圍值被設置,但它似乎仍然不工作:

做一個NSLog(@「%@」,[urlRequest allHTTPHeaderFields])顯示:{Range =「bytes = 13207107-」; }或者在註釋掉setValue代碼的情況下:{Range =「13207107-」;}。

我想也許HTTP服務器不支持範圍,但IT人向我保證它...

有誰看到在上面的代碼中的任何問題? 有沒有簡單的方法來測試一個Web服務器是否支持範圍字段?

謝謝!

回答

1

我會獨立於您的應用測試服務器。請求的格式似乎是正確的。告訴最簡單的方法是使用curl它隨OSX:

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

如果你沒有看到Content-Range在響應頭和(在這種情況下401)適當Content-Length頭,你就會知道服務器發生故障。