Заголовка авторизации 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" и все работает отлично