Afnetworking вызывает команду curl для получения токена доступа

Я использую команду 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)"  

Любое предложение будет очень признательно. Я новичок в объективном кодировании, поэтому я был бы очень признателен, если бы кто-то мог мне здесь помочь.

--data, это не параметр заголовка, не так ли? Для этого это -H или --header. --data помещает параметры в HTTPBody (также кажется, что это делает application/x-www-form-urlencode, но ваш сервер может принимать больше "JSON like"). Так что вместо этого должен быть parameters:@{@"client_id="xxx", etc.}. Кроме того, поскольку вы установили responseSerializer на AFJSONRequestSerializer, я не думаю, что вам нужно устанавливать application/json, я думаю, что это уже сделано.
Larme 10.09.2018 10:02

@Larme Я пробовал это, но теперь получаю ошибку 401 "Error Domain = com.alamofire.error.serialization.response Code = -1011" Request failed: unauthorized (401) "Как мы можем это исправить?

Richa Srivastava 10.09.2018 10:21

Теперь он не работает !! Я неправильно установил один параметр. Спасибо @Larme

Richa Srivastava 10.09.2018 10:26
0
3
216
1

Ответы 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) {

}];

Другие вопросы по теме