2013-10-30 13 views
6

Hej,POST-Anfrage mit AFNetworking 2.0 - AFTHTPSessionManager

Ich habe Probleme mit einer POST-Anfrage an die Parser-REST-API. Ich benutze AFNetworking 2.0. Mein Code für die AFHTTPSessionManager Subclass sieht wie folgt aus:

+ (ParseAPISession *)sharedSession { 
    static ParseAPISession *sharedSession = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     sharedSession = [[ParseAPISession alloc] initWithBaseURL:[NSURL URLWithString:kSDFParseAPIBaseURLString]]; 
    }); 
    return sharedSession; 
} 

Und:

- (id)initWithBaseURL:(NSURL *)url { 
    self = [super initWithBaseURL:url]; 
    if (self) { 
     [self.requestSerializer setValue:kSDFParseAPIApplicationId forHTTPHeaderField:@"X-Parse-Application-Id"]; 
     [self.requestSerializer setValue:kSDFParseAPIKey forHTTPHeaderField:@"X-Parse-REST-API-Key"]; 
    } 

    return self; 
} 

ich die Anfrage, wie dies zu tun:

[[ParseAPISession sharedSession] POST:@"ClassName" parameters: [NSDictionary dictionaryWithObjectsAndKeys:@"name", @"name", nil] 
           success:^(NSURLSessionDataTask *task, id abc) { 
            NSLog(@"%@", abc); 
           } failure:^(NSURLSessionDataTask *task, NSError *error) { 
            NSLog(@"%@", error); 
}]; 

dies tun ich immer diese Art von Fehler angezeigt :

Da die GET-Anfrage wie ein Zauber funktioniert, bin ich ziemlich verwirrt, warum ich nicht etwas POSTIEREN kann. Kann mir jemand mit diesem Problem helfen?

Mit freundlichen Grüßen!

UPDATE

Glücklich nach dem Test um eine Menge diese Fehlermeldung nicht mehr angezeigt wird, unfortuatelly andere erschienen:

<NSHTTPURLResponse: 0x8b96d40> 
{ URL: https://api.parse.com/1/users } 
{ status code: 400, 
headers { 
    "Access-Control-Allow-Origin" = "*"; 
    "Access-Control-Request-Method" = "*"; 
    "Cache-Control" = "no-cache"; 
    Connection = "keep-alive"; 
    "Content-Length" = 130; 
    "Content-Type" = "application/json; charset=utf-8"; 
    Date = "Wed, 30 Oct 2013 20:01:58 GMT"; 
    Server = "nginx/1.4.2"; 
    "Set-Cookie" = "_parse_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiIlNjIxZjUxMzY3NWVhZWJmMDYyYWYwMGJiZTQ3MThmMWE%3D--851bd31b07e7dba2c5f83bb13a8d801ecbea42c4; domain=.parse.com; path=/; expires=Fri, 29-Nov-2013 20:01:58 GMT; secure; HttpOnly"; 
    Status = "400 Bad Request"; 
    "X-Runtime" = "0.060910"; 
    "X-UA-Compatible" = "IE=Edge,chrome=1"; 
} } 

mir jemand sagen kann, was der Status: 400 Bad Request ist zu sagen ich und wie kann ich es loswerden?

Antwort

9

Dieser Fehler bedeutet, dass Ihre POST-Anfrage durchgelaufen ist, der Server gibt Ihnen erfolgreich einige Daten zurück, die bei der Analyse Probleme bereiten. NSJSONSerialization

Sie müssen wahrscheinlich AFJSONResponseSerializer festlegen, um JSON-Fragmente zuzulassen.

Im init Methode Ihrer AFHTTPSessionManager Unterklasse:

AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; 
[self setResponseSerializer:responseSerializer]; 

Wenn dies nicht funktioniert, haben Sie wahrscheinlich eine Codierung Problem. Von der NSJSONSerialization Klassenreferenz:

The data must be in one of the 5 supported encodings listed in the JSON specification: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE. The data may or may not have a BOM. The most efficient encoding to use for parsing is UTF-8, so if you have a choice in encoding the data passed to this method, use UTF-8.

Überprüfen Sie den Codierungstyp durch den Server gesendet.

Schließlich können Sie entweder Haltepunkte in AFNetworking setzen oder AFNetworkActivityLogger einrichten, wodurch Anforderungen protokolliert werden, wenn sie an Ihre Konsole gesendet und empfangen werden. Dieses Tool ist unglaublich hilfreich beim Debuggen dieser Art von Problem.

+0

(Es ist auch möglich, die Server etwas anderes als JSON zurückkehrt, in dem Fall, dass Sie don möchte 'AFJSONResponseSerializer' überhaupt nicht benutzen.) –

+0

Hej, danke für deine Antwort! Ich habe das ausprobiert, aber in dem Moment bekomme ich eine andere Art von Fehlermeldungen (siehe Update oben), wo ich glaube, dass das ursprüngliche Problem nicht mehr das Hauptproblem ist ....vielleicht kannst du mir auch dabei helfen? – RuNsTa

+0

Sie sollten eine separate Frage dazu stellen. Ihre Anfrage ist nicht das richtige Format für Parse und der Server lehnt es ab. (IE, Sie haben jetzt ein Parse-Problem, kein AFNetworking-Problem.) –

1

Dieser arbeitete für mich:

in den AFHTTPSessionManager Unterklasse initialisieren es mit den folgenden Serializer:

[self setRequestSerializer:[AFHTTPRequestSerializer serializer]]; [self setResponseSerializer:[AFJSONResponseSerializer serializer]];

Verwandte Themen