J'essaie la nouvelle version 2.0 d'AFNetworking et j'obtiens l'erreur ci-dessus. Une idée pourquoi cela se produit? Voici mon 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];
J'utilise Xcode 5.0.
Voici également le message d'erreur:
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}
Je viens de cacher le JSON en utilisant kJSONlink. Cela devrait retourner un JSON.
ios
afnetworking
afnetworking-2
jaytrixz
la source
la source
op.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
acceptableContentTypes
:)op.responseSerializer.acceptableContentTypes = [op.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
op.responseSerializer.acceptableContentTypes = NSSet(object: "text/html")
Configuration de mon
RequestOperationManager
sérialiseur de réponse pourHTTPResponseSerializer
résoudre le problème.Objectif c
Rapide
Faire ce changement signifie que je n'ai pas besoin d'ajouter
acceptableContentTypes
à chaque demande que je fais.la source
AFJSONResponseSerializer
responseSerializer
surAFJSONResponseSerializer
.J'ai poussé la réponse / le commentaire de @ jaytrixz un peu plus loin et j'ai ajouté "text / html" à l'ensemble de types existant. De cette façon, quand ils le fixent côté serveur sur "application / json" ou "text / json", je prétends que cela fonctionnera de manière transparente.
la source
Côté serveur, j'ai ajouté:
dans mon code .php et cela a également résolu le problème.
la source
if(!headers_sent() ) { header('Content-Type: application/json'); }
Est une bonne solutionJe résous ce problème sous un angle différent.
Je pense que si le serveur envoie des données JSON avec en-
Content-Type: text/html
tête. Cela ne signifie pas que le serveur avait l'intention de vous envoyer du HTML mais qu'il a accidentellement changé en JSON. Cela signifie que le serveur ne se soucie pas de ce qu'est l'en-Content-Type
tête. Donc, si le serveur ne se soucie pas du côté client, il vaut mieux ignorer également l'en-Content-Type
tête. Pour ignorer l'Content-Type
enregistrement d'en-têteAFNetworking
De cette façon, le
AFJSONResponseSerializer
(celui par défaut) sérialise les données JSON sans archiver l'Content-Type
en-tête de réponse.la source
Un moyen simple pour permettre de recevoir le type de contenu "texte / simple":
De même si vous souhaitez activer le type de contenu "text / html":
la source
J'ai essayé la ligne ci-dessous selon la réponse @Andrie mais je n'ai pas fonctionné,
donc après avoir chassé plus, j'ai travaillé pour le faire fonctionner avec succès.
Voici mon extrait de code.
J'espère que cela aidera quelqu'un là-bas.
la source
C'est la seule chose que j'ai trouvé pour travailler
la source
Si quelqu'un utilise
AFHTTPSessionManager
alors on peut faire comme ça pour résoudre le problème,Je sous-classe
AFHTTPSessionManager
où je fais comme ça,la source
Dans mon cas, je n'ai aucun contrôle sur les paramètres du serveur, mais je sais qu'il attend "application / json" pour "Content-Type". Je l'ai fait du côté client iOS:
se référer à l' erreur de type de contenu AFNetworking version 2
la source
Ajoutez simplement cette ligne:
la source
J'ai eu un problème similaire avec AFNetworking à partir d'une base de code Swift, donc je laisse cela ici dans le cas éloigné, quelqu'un est aussi malchanceux que moi d'avoir à travailler dans une telle configuration. Si tu l'es, je te sens mon pote, reste fort!
L'opération a échoué en raison d'un "type de contenu inacceptable", malgré le fait que je définisse le
acceptableContentTypes
avec unSet
contenant la valeur du type de contenu en question.La solution pour moi a été de modifier le code Swift pour qu'il soit plus convivial pour Objective-C, je suppose :
la source
Une bonne question a toujours plusieurs réponses, pour réduire et vous aider à choisir la bonne réponse, ici j'ajoute la mienne aussi. Je l'ai testé et cela fonctionne bien.
la source
la source