Bit.ly API Objective C检索access_token

时间:2014-04-04 22:58:52

标签: objective-c nsurlrequest bit.ly

我有一个简单的问题。

我希望用户输入他的用户名(电子邮件)和密码,我想从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的这个命令在目标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

但是我仍然不知道如何设置客户端ID和客户端密码的输入。

有关如何将这些信息设置到请求中的任何帮助都会对我有所帮助!

杰克

1 个答案:

答案 0 :(得分:2)

不可否认,像AFNetworking这样的东西确实可以让NSURLConnection等工作变得更容易,但是如果你从头开始这样做,你就会很接近。

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

资源所有者凭据授予的端点。这将为您提供访问我们其余API所需的access_token。

流程中最棘手的部分是“授权”标题

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"];

这会将Authorization字段设置为:Basic clientID:clientSecret right base 64'ed

从那里你需要将正文设置为请求

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 for iPhone应用程序。希望这可以帮助。如果您对API或上述示例有任何疑问,请与我们联系。