Запрос URL-адреса iPhone: добавьте значение в поле заголовка HTTP - PullRequest
6 голосов
/ 27 апреля 2009

Я пытаюсь добавить значение в заголовок для запроса URL.

Что-то вроде этого работает просто отлично:

[urlRequest addValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];

Но это даже не отображается в шапке:

NSString *authString = [[NSString alloc] initWithString:
                          [defaults objectForKey:@"auth"]];
[urlRequest addValue:authString forHTTPHeaderField:@"iphoneID"];

Я полностью в тупике. Длина строки аутентификации составляет около 90 символов. Это проблема?

Edit: Вот код, который я пытаюсь:

NSString *authString = [[NSString alloc] initWithString:[defaults objectForKey:@"auth"]]; 
[urlRequest addValue:authString forHTTPHeaderField:@"iphoneid"]; 
[urlRequest addValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; 

Я вижу, что заголовок Accept-Encoding отправляется через Wireshark, но iphoneid нигде не найти. Это просто строка длиной 80-90 символов.

Другое обновление: Так что, похоже, проблема не в поле «iphoneid», а в строке authString, которую я пытаюсь передать. Другие строки, которые я просто создаю с помощью @ "что-то", работают нормально, но строка аутентификации, которую я извлекаю из NSUserDefaults, не отображается.

Предложения по отладке?

Ответы [ 3 ]

7 голосов
/ 29 мая 2009

Истинная проблема.

Строка, которую я извлекал из NSUserDefaults, уже заканчивалась строкой. При установке в качестве заголовка добавляется еще один \r\n, что, по-видимому, недопустимо. Таким образом, заголовок не будет появляться ни в каких исходящих пакетах.

Исправление:

Используйте это, чтобы обрезать символы перед установкой в ​​качестве значения заголовка.

[yourString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];

2 голосов
/ 29 апреля 2009

Контрольный список тестирования:

  • Убедитесь, что у вас действительно есть NSMutableURLRequest (а не NSURLRequest) на данный момент. В частности, проверьте в своих журналах исключение из-за «нераспознанного селектора».

  • Убедитесь, что urlRequest не равен nil.

  • Переключиться на setValue: forHTTPHeaderField: вместо addValue: forHTTPHeaderField:.

  • Поменяйте значение forHTTPHeaderField: @ на "Accept-Encoding", чтобы увидеть, является ли поле проблемой

  • Поменяйте @ "gzip" для аутентификации, чтобы увидеть, является ли значение проблемой.

1 голос
/ 27 апреля 2009

Вам нужен веб-прокси Charles, чтобы увидеть, какие значения заголовков действительно исходящие и входящие. Затем вы можете увидеть, действительно ли проблема в вашем коде или в каком-то волшебстве на сервере, отбрасывающем вещи.

Есть бесплатная пробная версия, и после ее установки, если вы нажмете на запись, любой трафик, который отправляет симулятор, пройдет через прокси Очень мило.

http://www.charlesproxy.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...