Ich probiere die neue Version 2.0 von AFNetworking aus und erhalte den obigen Fehler. Irgendeine Idee, warum das passiert? Hier ist mein Code:
NSURL *URL = [NSURL URLWithString:kJSONlink];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
op.responseSerializer = [AFJSONResponseSerializer serializer];
[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
[[NSOperationQueue mainQueue] addOperation:op];
Ich benutze Xcode 5.0.
Hier ist auch die Fehlermeldung:
Error: Error Domain=AFNetworkingErrorDomain Code=-1016 "Request failed: unacceptable content-type: text/html" UserInfo=0xda2e670 {NSErrorFailingURLKey=kJSONlink, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0xda35180> { URL: kJSONlink } { status code: 200, headers {
Connection = "Keep-Alive";
"Content-Encoding" = gzip;
"Content-Length" = 2898;
"Content-Type" = "text/html";
Date = "Tue, 01 Oct 2013 10:59:45 GMT";
"Keep-Alive" = "timeout=5, max=100";
Server = Apache;
Vary = "Accept-Encoding";
} }, NSLocalizedDescription=Request failed: unacceptable content-type: text/html}
Ich habe den JSON nur mit kJSONlink versteckt. Dies sollte einen JSON zurückgeben.
ios
afnetworking
afnetworking-2
jaytrixz
quelle
quelle
op.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
acceptableContentTypes
:)op.responseSerializer.acceptableContentTypes = [op.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
op.responseSerializer.acceptableContentTypes = NSSet(object: "text/html")
Einstellen des
RequestOperationManager
Response Serializer, umHTTPResponseSerializer
das Problem zu beheben .Ziel c
Schnell
Wenn ich diese Änderung
acceptableContentTypes
vornehme , muss ich nicht jeder Anfrage etwas hinzufügen .quelle
AFJSONResponseSerializer
responseSerializer
auf setzenAFJSONResponseSerializer
.Ich ging die Antwort / den Kommentar von @ jaytrixz noch einen Schritt weiter und fügte "text / html" zu den vorhandenen Typen hinzu. Auf diese Weise, wenn sie es auf der Serverseite auf "application / json" oder "text / json" korrigieren, behaupte ich, dass es nahtlos funktioniert.
quelle
Auf der Serverseite habe ich hinzugefügt:
in meinen .php-Code und dies hat auch das Problem behoben.
quelle
if(!headers_sent() ) { header('Content-Type: application/json'); }
Ist eine schöne LösungIch löse dieses Problem aus einer anderen Perspektive.
Ich denke, wenn der Server JSON-Daten mit
Content-Type: text/html
Header sendet . Dies bedeutet nicht, dass der Server-Typ beabsichtigt hat, Ihnen HTML zu senden, sondern versehentlich in JSON geändert wurde. Es bedeutet, dass es dem Server-Typ einfach egal ist, was derContent-Type
Header ist. Wenn es dem Server-Typ als Client-Seite egal ist, ignorieren Sie besser auch denContent-Type
Header. Um denContent-Type
Header zu ignorieren, checken Sie einAFNetworking
Auf diese Weise
AFJSONResponseSerializer
serialisiert der (Standard) die JSON-Daten, ohne den AntwortheaderContent-Type
einzuchecken.quelle
Eine einfache Möglichkeit, den Inhaltstyp "Text / Nur" zu empfangen:
Ebenso, wenn Sie den Inhaltstyp "text / html" aktivieren möchten:
quelle
Ich habe es unter der Zeile gemäß der Antwort von @Andrie versucht, aber es hat nicht funktioniert.
Nachdem ich mehr gejagt hatte, arbeitete ich daran, dass es erfolgreich funktionierte.
Hier ist mein Code-Snip.
Hoffe, das wird jemandem da draußen helfen.
quelle
Dies ist das einzige, was ich gefunden habe, um zu arbeiten
quelle
Wenn jemand verwendet,
AFHTTPSessionManager
kann man dies tun, um das Problem zu lösen.Ich habe untergeordnet,
AFHTTPSessionManager
wo ich so mache,quelle
In meinem Fall habe ich keine Kontrolle über die Servereinstellungen, aber ich weiß, dass "application / json" für "Content-Type" erwartet wird. Ich habe dies auf der iOS-Client-Seite getan:
siehe AFNetworking Version 2 content-type Fehler
quelle
Fügen Sie einfach diese Zeile hinzu:
quelle
Ich hatte ein ähnliches Problem bei der Arbeit mit AFNetworking aus einer Swift-Codebasis, also lasse ich dies hier im Remote-Fall, dass jemand so viel Pech hat wie ich, in einem solchen Setup arbeiten zu müssen. Wenn Sie sind, ich fühle Sie Kumpel, bleiben Sie stark!
Der Vorgang schlug aufgrund eines "inakzeptablen Inhaltstyps" fehl, obwohl ich den Wert tatsächlich
acceptableContentTypes
mit einemSet
Wert für den Inhaltstyp festgelegt habe.Die Lösung für mich bestand darin, den Swift-Code so zu optimieren, dass er objektiv-C-freundlicher ist, denke ich :
quelle
Eine gute Frage hat immer mehrere Antworten, um sie zu reduzieren und Ihnen bei der Auswahl der richtigen Antwort zu helfen. Hier füge ich auch meine eigene hinzu. Ich habe es getestet und es funktioniert gut.
quelle
quelle