2016-09-04 5 views
0

I AFNetworking bin mit einem Post Web-Service anrufen, aber jedes Mal bekomme ich die AntwortiOS AFNetworking Post-Anforderung kehrt Anfrage fehlgeschlagen: Ungültige Anforderung (400)

Fehler Domain = com.alamofire.error.serialization .response-Code = -1011 "Die Anforderung ist fehlgeschlagen: Ungültige Anforderung (400)"

Hier ist mein Code

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:configuration]; 

manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
manager.responseSerializer.acceptableContentTypes = [self.responseSerializer.acceptableContentTypes setByAddingObject:@"application/json"]; 

[manager.requestSerializer setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"]; 

NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init]; 

[parameters setObject:self.APIClientID forKey:@"client_id"]; 
[parameters setObject:self.APIClientSecret forKey:@"client_secret"]; 
[parameters setObject:self.APIGrantType forKey:@"grant_type"]; 

[manager POST:self.requestURL 
parameters:parameters 
    progress:nil 
    success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
     success(task, responseObject); 
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
     failure(task, error); 
    }]; 

es in Postbote arbeitet. Here is the request on postman Auch ich fand viele Antworten für ähnliche Fehler, aber es löste nichts.

+0

Haben Sie zuerst Ihre API in Postbote überprüft? Hast du die App-Transport-Sicherheitseinstellungen in deinem Plist hinzugefügt? –

+0

tat ich, und es funktioniert im Postboten. –

+0

Wahrscheinlich ist Ihre Anfrage nicht genau so wie die, die Sie über Postman senden. Setzen Sie die URL auf eine HTTP-URL und überprüfen Sie den Inhalt Ihrer Anfrage mit Wireshark oder ähnlichem und vergleichen Sie sie mit dem, was Sie mit Postman gesendet haben. – jcaron

Antwort

2

Sie verwenden eine AFJSONRequestSerializer, um Ihre Anfrage zu serialisieren. Dadurch wird eine JSON-Payload und keine URL-codierte Formularanforderung erstellt.

Verwenden Sie stattdessen AFHTTPRequestSerializer.

Weitere Informationen finden Sie in der Dokumentation here.

Sie können auch die folgende Codezeile entfernen und die korrekte Anfrage Serializer wird das für Sie handhaben:

[manager.requestSerializer setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"]; 
Verwandte Themen