2008-12-08 158 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消息,如果有效初始化。