2008-12-08 215 views
4

我正在使用包裝類CFHTTPMessage,它包含一個CFHTTPMessageRef對象,其中添加了方法(GET),Web應用程序服務器的URL以及一些包含日期的自定義標頭和認證隨機數。從CFHTTPMessageRef獲取原始HTTP請求

我在獲取方法和URL返回某些數據時遇到了一些問題。我想我已經制定了認證隨機數。

我想通過查看轉到Web應用程序的原始請求並確保所有內容格式正確來排除此問題。

我的問題是:如果我有一個CFHTTPMessageRef對象(例如messageRef),是否有辦法記錄來自此消息的原始HTTP請求?

我試過以下,但我得到一個EXC_BAD_ACCESS信號,當我試圖訪問它的字節:

CFDataRef messageData = CFHTTPMessageCopyBody(messageRef); 

感謝您的任何意見。

作爲替代方案,是否可以在交換網絡上使用數據包嗅探器?我可以在筆記本電腦上運行ettercap,但不知道如何嗅探我的iPhone在本地無線網絡上正在做什麼。

回答

9

下工作良好:

NSData *d = (NSData *)CFHTTPMessageCopySerializedMessage(messageRef); 
NSLog(@"%@",[[[NSString alloc] initWithBytes:[d bytes] length:[d length] encoding:NSUTF8StringEncoding] autorelease]); 

希望這是幫助他人。

+0

感謝代碼片段,它適用於我所需要的。 – 2009-02-08 04:13:02

0

當訪問字節時,您應該獲得EXC_BAD_ACCESS的唯一原因是messageData爲NULL(無HTTP正文)並且您將其解除引用。

要記住的要點:HTTP正文不是「原始請求」。它不包含頭文件或實際的HTTP指令(GET/POST/ETC)。如果你沒有真正設置正文內容,它將是零。

您的CFHTTPMessageRef值未正確初始化是可能的(但不太可能)。在調試器中通過設置CFHTTPMessageCopyBody行的斷點,進入Debugger Console窗口,將文本輸入光標設置到該窗口的最後一行並輸入「po messageRef」來檢查。它應該給你一個CFTypeID消息,如果有效初始化。