I need the correct syntax for the setValue:forHTTPHeaderField: method on NSMutableURLRequest

StackOverflow https://stackoverflow.com/questions/1362454

  •  20-09-2019
  •  | 
  •  

Question

I am pulling my hair out trying to conjure up the correct syntax to set the HTTP header information do a byte-range load from an HTTP server.

This is the offending method on NSMutableURLRequest - (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field

This is how I am using this method to load the first 512 byte of a URL request.

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    
[request setHTTPMethod:@"GET"];
[request setValue:@"0-512\r\n" forHTTPHeaderField:@"Range"];

So far it is ignored and I always receive the entire data payload. I just want the range of bytes specified (0 - 512). Can someone please relieve my headache?

Update: I have used curl to confirm that my web server supports byte ranges thusly: curl --range 0-2047 http://www.somewhere.com/humungodata.dat -o "foobar"

The file size of foobar is 2048

Cheers, Doug

Was it helpful?

Solution

Problem solved.

By adding additional header fields the code immediately worked correctly. Why? Dunno. But it works:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

[request setHTTPMethod:@"GET"];

[request setValue:@"keep-live"      forHTTPHeaderField:@"Connection"];
    [request setValue:@"300"        forHTTPHeaderField:@"Keep-Alive"];
[request setValue:@"bytes=0-2047"   forHTTPHeaderField:@"Range"];

OTHER TIPS

Your original code was wrong in the setValue line, it should be @"bytes=0-512". In your followup, you used the correct string, so the other headers should not be needed.

What you have there should be the correct way to add a header value to a URL request, however i thought only posts got header values, maybe im wrong, have you tried doing this on other enviroments and gotten it to work? Maybe take out the \r\n?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top