NSMutableURLRequest с несколькими заголовками - PullRequest
0 голосов
/ 16 октября 2011

Я пытаюсь создать синхронный REST-запрос к API. API использует базовую аутентификацию HTTP, поэтому в дополнение к отправке заголовка Accept: application/json мне необходимо указать заголовок Authorization, а также мою пару имени пользователя и пароля в кодировке Base64. Когда я использую только один заголовок , запрос выполняется очень хорошо (либо успешно аутентифицирует меня, либо задает мой формат контента), но когда я использую оба заголовка, он, кажется, игнорирует строку Authorization и возвращает «HTTP Базовый доступ запрещен "(предположительно 401).

Так что я не могу на всю жизнь понять, что случилось. Я на 100% уверен, что мои учетные данные верны, потому что выполнение запроса через REST-клиент работает просто отлично. Я довольно новичок в Objective-C, поэтому я думаю, что, возможно, может быть какой-то шаблон проектирования, который я не следую Допустимо ли вызывать setValue:forKey на NSMutableDictionary несколько раз? Я также попытался использовать setValue:forHTTPHeader для объекта запроса с теми же результатами.

Вот код:

NSURL *url = [NSURL URLWithString:@"http://foo.com/api/v1/bar"];
NSMutableURLRequest *request= [NSMutableURLRequest requestWithURL:url];
NSMutableDictionary *headers = [NSMutableDictionary dictionary];
NSURLResponse *urlResponse;
NSError *error;

[headers setValue:@"application/json" forKey:@"Accept"];
[headers setValue:@"Basic ..." forKey:@"Authorization"];

[request setAllHTTPHeaderFields:headers];

NSData *urlData = [NSURLConnection sendSynchronousRequest:request 
                                        returningResponse:&urlResponse 
                                                    error:&error];

NSString *responseString = [[NSString alloc] initWithData:urlData 
                                                 encoding:NSUTF8StringEncoding];

NSLog(@"%@",responseString);

1 Ответ

1 голос
/ 28 января 2016

Ответ должен использоваться:

[request addValue:@"Basic ..." forHTTPHeaderField:@"Authorization"];

, который добавляет другой заголовок в экземпляр запроса.

...