NSUrlRequest: где приложение может найти заголовки по умолчанию для HTTP-запроса? - PullRequest
5 голосов
/ 17 апреля 2011

Кто-нибудь знает, где приложение iOS может видеть заголовки по умолчанию, которые NSUrlRequest устанавливает для HTTP-запроса?

Просто создайте NSUrlRequest с "http: // .." NSURL и затем спросите: [request allHTTPHeaderFields] возвращает пустой словарь. Но Я знаю , что, например, "Accept-Encoding" имеет значение "gzip" . Поэтому я хочу получить все эти поля и показать их в демонстрации HTTP-запроса.

Я также пытался swizzle [NSMutableURLRequest setValue:forHTTPHeaderField:], но, похоже, он не используется базовым API (NSURLRequest или NSURLConnection) для установки тех полей по умолчанию, за которыми я ищу.

Я делаю простую демонстрацию iOS, которая показывает информацию о HTTP-запросах и ответах, поэтому не имеет значения, будет ли для этого использоваться публичный или частный API.

Ответы [ 3 ]

14 голосов
/ 18 апреля 2011

Ваше приложение не может. Все сделано в CFNetwork - Связь с HTTP-серверами . Я полагаю, что это просто добавляет отсутствующие значения заголовка, не предоставленные NSURLRequest .

По умолчанию:

  • ПОЛЬЗОВАТЕЛЬСКИЙ АГЕНТ"AppName - Eng / 1.0 CFNetwork / 485.13.9 Darwin / 10.7.0"
  • ПРИНЯТЬ"* / *"
  • ПРИНЯТЬ ЯЗЫК"en-us"
  • ПРИНЯТЬ-КОДИТЬ"gzip, deflate"
  • СОЕДИНЕНИЕ"keep-alive"
5 голосов
/ 18 апреля 2011

хмм ... может быть, вы захотите попробовать в течение

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse

метод в вашем пользовательском классе nsurlconnection. хотя в документации упоминается что-то о перенаправлениях, это, безусловно, стоит изучить.

2 голосов
/ 22 апреля 2011

Это может быть излишним, но на основе сообщения в блоге Мэтта Галлахера Я создал еще более простой локальный HTTP-слушатель и отправил ему отдельный запрос [mutableCopy], чтобы иметь возможность читать и выводитьвсе HTTP-заголовки, которые есть в этом запросе.

Лучшее решение должно состоять в том, чтобы настроить локальный обработчик HTTP-запросов, я думаю, что это должно выглядеть лучше, но для простой демонстрационной версии просто показать все отправленные / полученные заголовки этого решения.все в порядке.

...