4

我正在使用 的包装类CFHTTPMessage,它包含一个CFHTTPMessageRef添加了方法 (GET) 的对象、Web 应用程序服务器的 URL,以及一些包含日期和身份验证随机数的自定义标头。

我在获取返回某些数据的方法和 URL 时遇到了一些问题。我想我已经计算出了身份验证随机数。

我想通过查看发送到 Web 应用程序的原始请求来解决此问题,并确保所有内容的格式都正确。

我的问题是:如果我有一个CFHTTPMessageRef对象(例如messageRef),有没有办法记录来自该消息的原始 HTTP 请求?

我尝试了以下方法,但是EXC_BAD_ACCESS当我尝试访问它的字节时收到一个信号:

CFDataRef messageData = CFHTTPMessageCopyBody(messageRef);

感谢您的任何建议。

作为替代方案,是否可以在交换网络上使用数据包嗅探器?我可以ettercap在笔记本电脑设备上运行,但不知道如何嗅探我的 iPhone 在本地无线网络上所做的事情。

4

2 回答 2

9

以下效果很好:

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

希望这对其他人有帮助。

于 2008-12-08T23:35:44.993 回答
0

访问字节时应该获得 EXC_BAD_ACCESS 的唯一原因是如果 messageData 为 NULL(无 HTTP 正文)并且您正在取消引用它。

要记住的一点:HTTP 正文不是“原始请求”。它不包括标头或实际的 HTTP 指令 (GET/POST/ETC)。如果您没有实际设置正文内容,它将为零。

您的 CFHTTPMessageRef 值可能(但不太可能)未正确初始化。通过在 CFHTTPMessageCopyBody 行上设置断点,进入调试器控制台窗口,将文本输入光标设置到此窗口的最后一行并键入“po messageRef”,在调试器中检查这一点。如果有效初始化,它应该给你一个 CFTypeID 消息。

于 2008-12-08T22:25:57.087 回答