Я пытаюсь создать синхронный 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);