【问题标题】:Getting raw HTTP request from CFHTTPMessageRef从 CFHTTPMessageRef 获取原始 HTTP 请求
【发布时间】:2008-12-08 04:55:05
【问题描述】:

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

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

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

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

我尝试了以下方法,但当我尝试访问其字节时收到EXC_BAD_ACCESS 信号:

CFDataRef messageData = CFHTTPMessageCopyBody(messageRef);

感谢您的建议。

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

【问题讨论】:

    标签: iphone networking core-foundation


    【解决方案1】:

    以下效果很好:

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

    希望这对其他人有帮助。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 2016-04-24
        • 2021-01-09
        • 1970-01-01
        • 1970-01-01
        • 2021-12-23
        相关资源
        最近更新 更多