0

我正在努力寻找正确的语法来设置 HTTP 标头信息,以便从 HTTP 服务器执行字节范围加载。

这是 NSMutableURLRequest 上的违规方法 - (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field

这就是我使用此方法加载 URL 请求的前 512 个字节的方式。

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

到目前为止,它被忽略了,我总是收到整个数据有效负载。我只想要指定的字节范围(0 - 512)。有人可以减轻我的头痛吗?

更新:我已经使用 curl 来确认我的网络服务器因此支持字节范围: curl --range 0-2047 http://www.somewhere.com/humungodata.dat -o "foobar"

foob​​ar 的文件大小为 2048

干杯,道格

4

3 回答 3

1

问题解决了。

通过添加额外的标题字段,代码立即正常工作。为什么?不知道。但它有效:

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"];
于 2009-09-01T16:31:14.813 回答
0

您的原始代码在 setValue 行中是错误的,它应该是 @"bytes=0-512"。在您的后续行动中,您使用了正确的字符串,因此不需要其他标题。

于 2013-08-04T00:36:42.613 回答
-1

您所拥有的应该是向 URL 请求添加标头值的正确方法,但是我认为只有帖子才有标头值,也许我错了,您是否尝试过在其他环境中执行此操作并使其正常工作?也许取出\r\n?

于 2009-09-01T13:33:56.133 回答