2012-02-01 1 views
4

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

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

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

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

ответ

1

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

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

for (NSString *h in headers) { 
    [renderedRequest appendFormat:@"%@: %@\r\n", h, [headers objectForKey:h]]; 
} 
1

Согласно ваш последний вопрос:

  1. Проверить cookiesCenter.
  2. Проверьте учетные данные хранилища.
  3. Запишите все заголовки, например, по первому методу делегата urlConnection didReceiveResponse:.
  4. сделать эту связь с местным WebService и попытаться поймать все заголовки, Титулы и т.д.

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

+0

Спасибо за ваш ответ. Мне бы хотелось узнать, о каком вопросе вы думаете - я не спрашивал ничего подобного здесь, но, возможно, вопрос, который вы помните, поможет. Во всяком случае, я должен был быть более конкретным: то, что я пытаюсь сделать, - это получить запрос * в коде *. Похоже, что NSURLConnection может иметь такой метод, как '-requestDataFromURLRequest:'. Система загрузки URL-адресов знает, как создать необработанные данные запроса. Я хочу, чтобы он сделал это для меня и просто передал мне данные запроса вместо подключения и отправки. – Caleb

+0

в этом случае попробуйте использовать CFStream и затем запросить запрос. Вы сможете увидеть все данные в writeStream. –