2016-11-06 4 views
5

I AFNetworking in meinem Projekt verwendet habe, wenn ich Anfrage gesendet, Im Diese Nachricht in Ausfall Block bekommen,AFNetworking Problem mit Antwort: nicht erlaubt (401)

Fehler Domain = com.alamofire.error.serialization. Antwort-Code = -1011 "Die Anforderung ist fehlgeschlagen: nicht erlaubt (401)" Userinfo = {com.alamofire.serialization.response.error.response = com.alamofire.serialization.response.error.data = < 7b227375 63.636.573 73223a66 616c7365 2c226d65 73736167 65223a22 41757468 656e7469 63617469 6f6e2066 61696c65 64227d>, NSLocalizedDescription = Anfrage fehlgeschlagen: nicht autorisiert (401)}

So sende ich Anfrage mit AFNetworking.

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:BASE_URL]]; 

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", nil]; 

NSString *path = [NSString stringWithFormat:@"/api/##/##/##/sign_in"]; 

NSString *params = @"{\"user\": {\"uid\": \"10236412002551\",\"access_token\":\"g6tdbvc34seadcx7yufbbcgvf8ijhss\",\"email\": \"[email protected]\",\"latitude\": \"6.927079\",  \"longitude\": \"79.861243\",\"remote_avatar_url\": \"\"}}"; 

manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
manager.responseSerializer = [AFJSONResponseSerializer serializer]; 

AFSecurityPolicy* policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; 
[policy setValidatesDomainName:NO]; 
[policy setAllowInvalidCertificates:YES]; 

[manager POST:path parameters:params success:^(NSURLSessionDataTask *task, id responseObject) { 
    if([[responseObject objectForKey:@"error_code"] intValue]==0){ 
     if (success) { 
      success(userArray); 
     } 
    } 
    } failure:^(NSURLSessionDataTask *task, NSError *error) { 
     if (failure) { 
      failure(error); 
     } 
    }]; 
} 

Wenn ich aber durch den Einsatz NSURLSession die richtige Antwort erhalten werden können, werden. (Code unten verweisen)

NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration]; 
    NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]]; 

    NSURL * url = [NSURL URLWithString:@"http://##/api/##/##/##/sign_in"]; 
    NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:url]; 

    NSString * params [email protected]"{\"user\": {\"uid\": \"10236412002551\",\"access_token\":\"g6tdbvc34seadcx7yufbbcgvf8ijhss\",\"email\": \"[email protected]\",\"latitude\": 6.927079,  \"longitude\": 79.861243,\"remote_avatar_url\": \"\"}}"; 

    [urlRequest addValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [urlRequest setHTTPMethod:@"POST"]; 
    [urlRequest setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]]; 

    NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest:urlRequest 
                 completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
                  NSLog(@"Response:%@ %@\n", response, error); 
                  if(error == nil) 
                  { 
                   NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; 

                   NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 

                   NSLog(@"Data = %@",text); 
                   NSLog(@"Data = %@",json); 
                  } 

                 }]; 
    [dataTask resume]; 

Ich habe Interesse an AFNetworking verwenden, aber aufgrund dieses Problems gewann ich Ich kann mich nicht vorwärts bewegen. Bitte helfen Sie mir, das Problem mit AFNetworking zu beheben.

Dies ist der Wunsch, ich sollte,

{ 
    "user": { 
     "uid": "102364120025511", 
     "access_token": "g6tdbvc34seadcx7yufbbcgaavf8ijh", 
     "email": "[email protected]", 
     "latitude": 6.927079, 
     "longitude": 79.861243, 
     "remote_avatar_url": "" 
    } 
} 

Dies ist die Antwort, die ich bekommen sollte,

{ 
    "success": true, 
    "message": "Successfully authenticated", 
    "user": { 
    "id": 123, 
    "email": "[email protected]", 
    "provider": "facebook", 
    "latitude": 6.927079, 
    "longitude": 79.861243, 
    "avatar": { 
     "url": "", 
     "thumb": "" 
    } 
    } 
} 
+0

BTW, wenn Sie sich fragen, was diese '7b227375 ...' Daten enthält, das ist eine JSON-Nutzlast, die sagt '{" Erfolg ": false," message ":" Authentifizierung fehlgeschlagen "}'. – Rob

Antwort

1

Sie bieten Ihre params als JSON-String und dann Anweisen AFNetworking senden zu verwenden a AFJSONRequestSerializer, um diese Zeichenfolge in einer JSON-Struktur darzustellen. Der Nettoeffekt ist, dass Sie JSONified zweimal haben.

Sie sollten Wörterbuch Objekt zur Verfügung stellen und lassen AFNetworking für Sie die JSON erstellen, zB:

NSString *params = @{@"user": @{@"uid": @"10236412002551", @"access_token": @"g6tdbvc34seadcx7yufbbcgvf8ijhss", @"email": @"[email protected]", @"latitude": @6.927079, @"longitude": @79.861243, @"remote_avatar_url": @""}}; 

By the way, lassen AFNetworking die JSON bauen (die NSJSONSerialization verwendet) für Sie wesentlich robuster sein als Ihre versuchen, dies selbst zu tun. Selbst wenn Sie den Ansatz NSURLSession verwenden, würde ich vorschlagen, diese verschachtelte Wörterbuchstruktur zu erstellen und dann NSJSONSerialization zu verwenden, um die JSON-Datennutzlast zu erstellen. Oder, wenn Sie AFNetworking verwenden, wird dies für Sie tun.

+0

Große Hilfe bro @Rob, Danke :) – Infaz

Verwandte Themen