2011-04-17 83 views
5

有誰知道在哪裏的iOS應用可以看到默認的標頭NSUrlRequest集HTTP請求?NSUrlRequest:應用程序可以在哪裏找到HTTP請求的默認標頭?

只是創造NSUrlRequest的 「http:// ..」NSURL,然後問:[request allHTTPHeaderFields]返回一個空的字典。但I know是例如「接受編碼」設置爲「壓縮」。所以我想獲得所有這些字段並在HTTP請求演示中顯示它們。

我也試過swizzle[NSMutableURLRequest setValue:forHTTPHeaderField:],但它似乎沒有被底層API(NSURLRequest或NSURLConnection)用來設置我正在尋找的那些默認字段。

我做只是一個簡單的iOS演示,顯示HTTP請求和響應信息,因此它並不真正重要,如果這將是用於該公共或私有的API。

回答

2

這可能是矯枉過正,但基於Matt Gallagher's blog post我創建了更簡單的本地HTTP偵聽器和發送單獨[mutableCopy]編輯要求它能夠讀取並輸出該請求所有的HTTP標頭。

更好的解決方案必須設置一個本地的HTTP請求捕手,它必須看起來更好,我認爲,但對於簡單的演示的範圍只是爲了顯示所有已發送/接收的頭該解決方案確定。

5

嗯......也許你可能希望在您的自定義NSURLConnection的類中

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

方法試試。雖然文檔提到了重定向的一些事情,但這當然值得研究。

+0

好的一擊,但不幸的是沒有100%命中。 – zubko 2011-04-20 20:31:55

+1

事實上' - (的NSURLRequest *)連接:willSendRequest:redirectResponse:'會被調用時不需要重定向(儘管官方的文檔)一個簡單的請求和它的頭都會有一些領域在此階段: '{接受=「*/*「; Accept-Encoding「=」gzip,deflate「; Accept-Language」=「en-us」;}'但還有更多:設置在較低級別的「主機」,「用戶代理」和「連接」已經運行一個簡單的本地HTTP服務器來查看所有這些服務器。 – zubko 2011-04-20 20:40:13

14

您的應用程序不能。它在CFNetwork - Communicating with HTTP Servers中完成。我相信它只是增加了缺少的標題值,而不是NSURLRequest提供的。

默認值爲:

  • 用戶代理 「AppName的 - 主機/ 1.0 CFNetwork的/ 485.13.9達爾文/ 10.7.0」
  • ACCEPT 「*/*」
  • ACCEPT-LANGUAGE 「EN-US」
  • 接受編碼 「的gzip,緊縮」
  • CONNECTION「保活」
+1

還有** HOST **「host:port」; – zubko 2011-04-22 01:18:03

相關問題