Цель API Bit.ly C получить access_token

У меня есть быстрый вопрос.

Я хочу, чтобы пользователь ввел свое имя пользователя (адрес электронной почты) и пароль, и я хочу получить токен доступа от bit.ly API.

Я пробовал до сих пор:

NSString *authStr = [NSString stringWithFormat:@"%@:%@", @"username", @"password"];
NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];
NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64Encoding]];
[request setValue:authValue forHTTPHeaderField:@"Authorization"];

Однако это не работает.

Что мне нужно, так это заставить эту команду curl работать в target c:

curl -u "username:password" -X POST "https://api-ssl.bitly.com/oauth/access_token"

Я знаю, что могу установить метод POST, но я не уверен, как установить имя пользователя: пароль: |

Я также пытался использовать

curl -u "CLIENT_ID:CLIENT_SECRET" -d "grant_type=password" -d "username=USERNAME" \
-d "password=PASSWORD" https://api-ssl.bitly.com/oauth/access_token

однако я до сих пор не знаю, как настроить ввод идентификатора клиента и секрета клиента.

Любая помощь в том, как я могу указать эту информацию в запросе, мне очень поможет!

Джек


person Janosch Hübner    schedule 04.04.2014    source источник


Ответы (1)


По общему признанию, такие вещи, как AFNetworking, немного упрощают работу с NSURLConnection и т.п., но если вы делаете это с нуля, вы близки.

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://api-ssl.bitly.com/oauth/access_token"]];

Конечная точка для предоставления учетных данных владельца ресурса. Это даст вам access_token, необходимый для доступа к остальной части нашего API.

Самая сложная часть потока — это заголовок «Авторизация».

NSString *authString = [NSString stringWithFormat:@"%@:%@", @"<YOUR CLIENT ID>", @"<YOUR CLIENT SECRET>"];
NSData *authData = [authString dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64 = [authData base64EncodedStringWithOptions:0];
NSString *authHeader = [NSString stringWithFormat:@"Basic %@", base64];
[request setValue:authHeader forHTTPHeaderField:@"Authorization"];

Это установит в поле авторизации значение: Basic clientID:clientSecret с правильной базой 64.

Оттуда вам нужно установить тело запроса

NSString *postBody = [NSString stringWithFormat:@"grant_type=password&username=%@&password=%@", @"<USERNAME>", @"<PASSWORD>"];
[request setHTTPBody:[postBody dataUsingEncoding:NSUTF8StringEncoding]];

Сообщите запросу, что это POST

[request setHTTPMethod:@"POST"];

Затем откройте NSURLConnection и обратите внимание на 3 важных делегированных метода.

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];

Вы захотите реализовать:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- (void)connectionDidFinishLoading:(NSURLConnection *)connection

Источник: я пишу приложение Bitly для iPhone. Надеюсь это поможет. Дайте мне знать, если у вас есть какие-либо вопросы об API или приведенном выше примере.

person nkirby    schedule 05.04.2014
comment
хорошая идея! У меня это работает по-другому, близко к вашему;), используя учетные данные пользователя. теперь работает нормально - person Janosch Hübner; 06.04.2014