Заголовка авторизации NSURLConnection не работает
Я пытаюсь отправить токен доступа OAuth в HTTP-заголовок через NSURLConnection, но, похоже, он не отправляет заголовок, потому что API продолжает давать мне ошибку, говоря, что "должен предоставить токен авторизации".
Это код, который я использую:
NSURL *aUrl = [NSURL URLWithString: @"http://generericfakeapi.com/user/profile"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:30.0];
[request addValue:[NSString stringWithFormat:@"OAuth %@", token] forHTTPHeaderField:@"Authorization"];
[request setHTTPMethod:@"GET"];
NSError *error = nil;
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error: &error];
NSDictionary *JSONDictionary = [NSJSONSerialization JSONObjectWithData:returnData options:kNilOptions error:&error];
NSLog(@"Response : %@", JSONDictionary);
И это пример команды cURL для API:
curl 'http://generericfakeapi.com/user/profile' -H 'Authorization: OAuth YourAuthToken'
Разве это не то, чем я занимаюсь в NSURLConnection?
Любая помощь будет оценена.
Ответы
Ответ 1
Измените эту строку:
NSURL *aUrl = [NSURL URLWithString: @"http://generericfakeapi.com/user/profile"];
To:
NSURL *aUrl = [NSURL URLWithString: @"http://generericfakeapi.com/user/profile/"];
Очевидно, что iOS отключает заголовок авторизации, если в конце URL-адреса нет косой черты. Эта проблема буквально стоила мне моего сна в течение двух дней.
Ответ 2
Для меня это выглядит хорошо. Вы уверены, что дали действительный токен?
Попробуйте поймать ошибку, подобную этой
if (error) {
NSLog(@"error : %@", error.description);
}
Мой код работает хорошо:
NSURL *jsonURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://....ID=%i", cellID]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:jsonURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:120.0];
[request setValue:@"Basic ...." forHTTPHeaderField:@"Authorization"];
NSURLResponse *response;
NSError * error = nil;
NSData *POSTReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
надеюсь, что это поможет
Ответ 3
У меня была такая же проблема. В моем случае я изменил "http" на "https" и все работает отлично