【问题标题】:AFNetworking calling curl command to get access tokenAFNetworking 调用 curl 命令获取访问令牌
【发布时间】:2019-02-14 14:52:37
【问题描述】:

我是一个获取访问令牌的 curl 命令,该命令如下所示 -

curl --data 'client_id=XXX&grant_type=XXX&client_secret=XXX&scope=XXX' "https://abc-internal.XXX.com/as/resourceOwner" -k -i

我需要从我的目标 C 代码中调用此命令来获取访问令牌,这是我的代码不起作用 -

 NSURL *strURL = [NSURL URLWithString:@"https://abc-internal.XXX.com/as/resourceOwner"];
    NSString *icpStr = [strURL absoluteString];
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [manager.requestSerializer setValue:@"XXX" forHTTPHeaderField:@"client_id"];
    [manager.requestSerializer setValue:@"XXX" forHTTPHeaderField:@"grant_type"];
    [manager.requestSerializer setValue:@"XXX" forHTTPHeaderField:@"client_secret"];
    [manager.requestSerializer setValue:@"XXX" forHTTPHeaderField:@"scope"];

    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
    [securityPolicy setValidatesDomainName:NO];
    [securityPolicy setAllowInvalidCertificates:YES];
    manager.securityPolicy = securityPolicy;

    [manager GET:icpStr parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        if ([responseObject isKindOfClass:[NSData class]])
        {
            NSError         *parseError = nil;
            NSDictionary    *resultsDictionary = (NSDictionary *) [NSJSONSerialization JSONObjectWithData: responseObject options: 0 error: &parseError];
            if (parseError)
            {
                NSLog(@"Parse Error %@",parseError);
            }else{
                NSLog(@"Results %@",resultsDictionary);
            }
        }
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error %@",error.localizedDescription);
    }];

我收到错误消息,说它的请求不正确 -

Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: bad request (400)"  

任何建议将不胜感激。我是 Objective C 编码的新手,所以如果有人能在这里帮助我,我将不胜感激。

【问题讨论】:

  • --data 这不是标头参数,不是吗?这是-H--header--data 将参数放入 HTTPBody 中(同样,它似乎是在做 application/x-www-form-urlencode,但您的服务器可能会接受更多“类似 JSON”)。所以它应该是parameters:@{@"client_id="xxx", etc.}。另外,既然你把responseSerializer设置为AFJSONRequestSerializer,我觉得你不需要设置application/json,我想已经完成了。
  • @Larme 我试过了,但现在我得到 401 错误“错误域=com.alamofire.error.serialization.response Code=-1011”请求失败:未经授权(401)“我们如何解决这个问题?
  • 现在不行了!!我设置了一个参数错误。谢谢@Larme

标签: ios objective-c afnetworking access-token


【解决方案1】:
 NSString *URLString = @"https://abc-internal.XXX.com/as/resourceOwner";
AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];
manager.responseSerializer =[AFHTTPResponseSerializer serializer];
[manager GET:URLString parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
 } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    if ([responseObject isKindOfClass:[NSData class]]) {
        NSError         *parseError = nil;
        NSDictionary    *resultsDictionary = (NSDictionary *) [NSJSONSerialization JSONObjectWithData: responseObject options: 0 error: &parseError];
        if (parseError)
        {
            NSLog(@"Parse Error %@",parseError);
        }else{
            NSLog(@"Results %@",resultsDictionary);
        }
    }
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

}];

【讨论】:

    猜你喜欢
    • 2019-08-17
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多