我正在使用CFHTTPMessage
的包装器类,其中包含一个CFHTTPMessageRef
对象,其中添加了方法(GET),Web应用程序服务器的URL以及一些包含的自定义标头日期和身份验证随机数。
我在获取方法和URL以返回某些数据时遇到了一些问题。我想我已经制定了身份验证随机数。
我想通过查看发送到Web应用程序的原始请求并确保所有内容都已正确格式化来解决此问题。
我的问题是:如果我有一个CFHTTPMessageRef
对象(例如messageRef
),是否有办法记录此消息中出现的原始HTTP请求?
我尝试过以下操作但在尝试访问其字节时收到EXC_BAD_ACCESS
信号:
CFDataRef messageData = CFHTTPMessageCopyBody(messageRef);
感谢您的任何建议。
作为替代方案,是否可以在交换网络上使用数据包嗅探器?我可以在笔记本电脑设备上运行ettercap
,但不知道如何嗅探我的iPhone在本地无线网络上的行为。
答案 0 :(得分:9)
以下效果很好:
NSData *d = (NSData *)CFHTTPMessageCopySerializedMessage(messageRef);
NSLog(@"%@",[[[NSString alloc] initWithBytes:[d bytes] length:[d length] encoding:NSUTF8StringEncoding] autorelease]);
希望这对其他人有帮助。
答案 1 :(得分:0)
访问字节时应该获得EXC_BAD_ACCESS的唯一原因是messageData为NULL(没有HTTP正文)并且您正在取消引用它。
要记住:HTTP正文不是“原始请求”。它不包括标头或实际的HTTP指令(GET / POST / ETC)。如果你实际上没有设定身体内容,那就是零。
可能(但不太可能)您的CFHTTPMessageRef值未正确初始化。通过在CFHTTPMessageCopyBody行上设置断点,进入Debugger Console窗口,将文本输入光标设置到此窗口的最后一行并输入“po messageRef”,在调试器中进行检查。如果有效初始化,它应该给你一个CFTypeID消息。