Как получить полный запрос от NSURLRequest? - PullRequest
5 голосов
/ 02 февраля 2012

Есть ли способ получить фактические данные, которые будут отправлены, когда NSURLConnection отправит NSURLRequest? Сейчас я в основном заинтересован в просмотре запросов HTTP и HTTPS, но, поскольку NSURLRequest работает для многих протоколов, кажется, что должен быть общий способ просмотра соответствующих данных для любого типа запроса.

Я что-то упустил или мне нужно составить запрос сам, комбинируя заголовки, тело и т. Д.?

Просто чтобы прояснить, я хотел бы сделать это программно, а не наблюдать за тем, что появляется на стороне сервера.

Обновление: На данный момент я написал код, который эффективно создает запрос, используя данные в NSURLRequest, поэтому я не спрашиваю, как это сделать. Однако я все еще хотел бы знать, есть ли способ получить доступ к потоку запросов, который сгенерирует система загрузки URL. Другими словами, могу ли я получить доступ к точным байтам, которые будут отправлены, если NSURLConnection отправит мой NSURLRequest?

Ответы [ 2 ]

1 голос
/ 12 мая 2012

Я что-то упустил или мне нужно составить запрос сам, комбинируя заголовки, тело и т. Д.?

Получается, что это именно то, что мне нужно было сделатьи это имеет смысл.Это обработчик протокола (подкласс NSURLProtocol), а не NSURLRequest, который знает, как отформатировать запрос для своего конкретного протокола.К счастью, очень легко сделать экземпляр NSURLRequest действительным HTTP-запросом.Вы можете получить метод (GET, POST и т. Д.), Запрошенный ресурс и хост из запроса, а также получить все заголовки HTTP, используя метод -allHTTPHeaderFields, который возвращает словарь.Затем вы можете перебирать ключи в словаре и добавлять строки в запрос, например:

for (NSString *h in headers) {
    [renderedRequest appendFormat:@"%@: %@\r\n", h, [headers objectForKey:h]];
}
1 голос
/ 02 февраля 2012

По вашему последнему вопросу:

  1. Проверка файлов cookieCenter.
  2. Проверка учетных данныхStorage.
  3. Записать все заголовки, например, для первого метода делегата urlConnection didReceiveResponse:.
  4. Установите соединение с локальным веб-сервисом и попытайтесь перехватить все заголовки, параметры и т. Д.

Кроме того, самый простой способ - сделать запрос самостоятельно.

...