NSUrlRequest:应用程序可以在哪里找到HTTP请求的默认标头?

时间:2011-04-17 19:33:09

标签: cocoa ios macos core-foundation

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

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

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

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

3 个答案:

答案 0 :(得分:14)

你的应用不能。它完成了CFNetwork - Communicating with HTTP Servers。我相信它只会添加NSURLRequest未提供的缺少标头值。

默认值为:

  • USER-AGENT “AppName - Eng / 1.0 CFNetwork / 485.13.9 Darwin / 10.7.0”
  • 接受“* / *”
  • ACCEPT-LANGUAGE “en-us”
  • 接受编码“gzip,deflate”
  • 连接“keep-alive”

答案 1 :(得分:5)

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

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse
自定义nsurlconnection类中的

方法。虽然文档提到了有关重定向的内容,但这当然值得研究。

答案 2 :(得分:2)

这可能是一种矫枉过正,但基于Matt Gallagher's blog post我创建了更简单的本地HTTP侦听器,并向它发送了一个单独的[mutableCopy] ed请求,以便能够读取和输出所有这些HTTP头请求已经。

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