如何在NSMutableURLRequest中删除头信息?

7
如何发送不包含头字段的请求?我正在从头开始构建自己的服务器实现,它不关心头字段。请求最多只包含一个POST正文。如果我缺少逻辑,请告诉我。
请不要提ASIHHTPRequest。谢谢。

你找到这个问题的答案了吗?我正在尝试删除所有标题,但似乎这里的回复今天都不起作用。 - Jan
4个回答

10

我想在NSMutableURLRequest中删除特定的头部信息,后来发现如果使用setValue:forHTTPHeaderField:方法并将值设为nil,实际上可以将其移除。

这个方法没有被苹果官方文档记录,但这样做似乎很合理。


4
仅针对通过谷歌找到此页面的人 -- 它不能再使用了(我正在使用10.8 sdk)。如果将其设置为nil,则用户代理将不会被更改。 - wecing
使用自定义标头,在 iOS 6.1 SDK 上对我有效(我没有测试 User-Agent)。 - Marián Černý

4

对于我来说,代码

[request addValue:@"" forHTTPHeaderField:@"User-Agent"];

仅添加了一个空字符串而不是清理User-Agent。相反,使用setValue修复它:

[request setValue:@"" forHTTPHeaderField:@"User-Agent"];

请注意,这是正确的答案。addValue将把新值附加到以逗号分隔的先前值上。setValue将替换先前的值。 - Nate Potter
回显,截至iOS 11.3仍然是正确的答案。 - Sam Clewlow

3
我发现对于一些请求头字段("User-Agent"是其中之一),通过使用nil来设置请求头的值会产生问题。
[request addValue:nil forHTTPHeaderField:@"User-Agent"];

实际上并没有移除这个标题字段,而是将其设置为默认值!

如果您确实想要移除内容,只需将值设置为空字符串即可:

[request addValue:@"" forHTTPHeaderField:@"User-Agent"];

1
我实际上发现在 MacOS 上使用 nil 可以移除标题。 - duncanc4

1
  1. 如果您控制服务器实现,为什么不直接忽略它们呢?

  2. [request setAllHTTPHeaderFields:[NSDictionary dictionary]] 是否有效?

  3. 如果 #2 无效,请尝试创建自己的子类,该子类始终从 allHTTPHeaderFields 方法返回空字典,并从 valueForHTTPHeaderField: 方法返回 nil。但是,NSURLConnection 可能会复制您的请求,因此您可能还需要覆盖 copyWithZone: 方法。


#1 对于这个实现来说,每节省一个字节都很重要。 - Gurpartap Singh
#2 不起作用,因为它没有覆盖内部字典。它只是覆盖了键(如果有的话)。我会看看子类化是否有帮助,并让您知道结果。 - Gurpartap Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接