Получение необработанного HTTP-запроса от CFHTTPMessageRef - PullRequest
4 голосов
/ 08 декабря 2008

Я работаю с классом-оболочкой для CFHTTPMessage, который содержит объект CFHTTPMessageRef, к которому добавляется метод (GET), URL-адрес сервера веб-приложений и несколько пользовательских заголовков, содержащих дату и одноразовый номер аутентификации.

У меня проблемы с получением метода и URL-адреса для возврата определенных данных. Я думаю, что я разработал одноразовый номер аутентификации.

Я бы хотел устранить эту проблему, посмотрев необработанный запрос, идущий в веб-приложение, и убедившись, что все отформатировано правильно.

У меня вопрос: если у меня есть объект CFHTTPMessageRef (например, messageRef), есть ли способ записать необработанный HTTP-запрос, исходящий из этого сообщения?

Я пробовал следующее, но я получаю сигнал EXC_BAD_ACCESS, когда пытаюсь получить доступ к его байтам:

CFDataRef messageData = CFHTTPMessageCopyBody(messageRef);

Спасибо за любой совет.

Как альтернатива, возможно ли использовать анализатор пакетов в коммутируемой сети? Я могу запустить ettercap на ноутбуке, но не знаю, как узнать, что мой iPhone делает в локальной беспроводной сети.

Ответы [ 2 ]

9 голосов
/ 09 декабря 2008

Следующие хорошо работали:

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

Надеюсь, что это полезно для других.

0 голосов
/ 09 декабря 2008

Единственная причина, по которой вы должны получать EXC_BAD_ACCESS при доступе к байтам, заключается в том, что messageData имеет значение NULL (без тела HTTP) и вы разыменовываете его.

Обратите внимание: тело HTTP не является "необработанным запросом". Он не включает заголовки или фактическую инструкцию HTTP (GET / POST / ETC). Если вы на самом деле не задали содержимое тела, оно будет равно нулю.

Возможно (но менее вероятно), что ваше значение CFHTTPMessageRef не инициализировано должным образом. Проверьте это в отладчике, установив точку останова в строке CFHTTPMessageCopyBody, перейдя в окно консоли отладчика, установив курсор ввода текста на последнюю строку в этом окне и напечатав «po messageRef». Он должен дать вам сообщение CFTypeID, если оно правильно инициализировано.

...