【问题标题】:Bit.ly API Objective C retrieve access_tokenBit.ly API Objective C 检索 access_token
【发布时间】:2014-04-04 22:58:52
【问题描述】:

我有一个小问题。

我希望用户输入他的用户名(电子邮件)和密码,并且我想从 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,但我不确定如何设置 username:password :|

我也尝试过使用

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和客户端密码的输入。

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

杰克

【问题讨论】:

    标签: objective-c nsurlrequest bit.ly


    【解决方案1】:

    诚然,像 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 正确 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
    

    资料来源:我为 iPhone 编写了 Bitly 应用程序。希望这可以帮助。如果您对 API 或上面的示例有任何疑问,请告诉我。

    【讨论】:

    • 好主意!我让它以不同的方式工作,接近你的;)使用用户凭据。现在工作正常
    猜你喜欢
    • 1970-01-01
    • 2018-12-20
    • 2012-06-03
    • 1970-01-01
    • 2019-06-18
    • 2021-01-11
    • 2013-02-04
    • 2012-11-29
    • 1970-01-01
    相关资源
    最近更新 更多