5

有人知道 iOS 应用程序在哪里可以看到NSUrlRequest为 HTTP 请求设置的默认标头吗?

只需NSUrlRequest使用“http://..” NSURL创建,然后询问:[request allHTTPHeaderFields]返回一个空字典。但我知道例如"Accept-Encoding"设置为"gzip"。所以我想获取所有这些字段并在 HTTP 请求演示中显示它们。

我也尝试过swizzle [NSMutableURLRequest setValue:forHTTPHeaderField:],但似乎底层 API(NSURLRequest 或 NSURLConnection)没有使用它来设置我正在寻找的那些默认字段。

我正在制作一个简单的 iOS 演示,它显示 HTTP 请求和响应信息,因此它是用于此的公共 API 还是私有 API 并不重要。

4

3 回答 3

14

你的应用程序不能。这一切都在CFNetwork - Communicating with HTTP Servers中完成。我相信它只是添加了NSURLRequest未提供的缺失标头值。

默认值为:

  • 用户代理“AppName - Eng/1.0 CFNetwork/485.13.9 Darwin/10.7.0”
  • 接受“*/*”
  • 接受语言“en-us”
  • 接受编码“gzip,放气”
  • 连接“保持活动”
于 2011-04-17T22:12:46.227 回答
5

嗯......也许你可能想试试

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse

自定义 nsurlconnection 类中的方法。尽管文档中提到了有关重定向的内容,但这当然值得研究。

于 2011-04-17T20:49:29.727 回答
2

这可能有点矫枉过正,但根据Matt Gallagher 的博客文章,我创建了更简单的本地 HTTP 侦听器,并向其发送了一个单独的 [mutableCopy]ed 请求,以便能够读取和输出该请求具有的所有 HTTP 标头。

更好的解决方案必须是设置一个本地 HTTP 请求捕获器,我认为它必须看起来更好,但是对于简单演示的范围只是为了显示所有发送/接收的标头,这个解决方案是可以的。

于 2011-04-22T01:29:33.577 回答