Alamofire.request(.GET, "url").authenticate(user: "", password: "").responseJSON() {
(request, response, json, error) in
println(error)
println(json)
}
Ceci est ma demande avec Alamofire, pour une certaine demande cela fonctionne parfois, mais parfois je reçois:
Optional(Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x78e74b80 {NSDebugDescription=Invalid value around character 0.})
J'ai lu que cela peut être dû à un JSON invalide, mais la réponse est une chaîne json statique que j'ai validée dans le validateur JSON comme valide. Il contient des caractères å ä ö et du HTML.
Pourquoi ai-je parfois cette erreur?
responseJSON() { ... }
bloc et de le remplacer par.responseString { _, _, s, _ in println(s) }
. Cela vous permet de voir le json qui est retourné pour rechercher tout texte étrange qui le rendrait impossible parresponseJSON
Réponses:
J'ai également fait face au même problème. J'ai essayé
responseString
au lieu deresponseJSON
ça et ça a marché. Je suppose que c'est un bug lié à sonAlamofire
utilisation avecdjango
.la source
J'ai eu la même erreur lors du téléchargement de l'image sous forme en plusieurs parties dans Alamofire que j'utilisais
j'ai corrigé en remplaçant par
J'espère que cela aidera quelqu'un.
la source
Que cela vous aide
la source
Le même problème m'est arrivé et cela a finalement été un problème de serveur car le type de contenu n'était pas défini.
Ajouter
À la chaîne de demande l'a résolu pour moi
la source
Dans mon cas, l'URL de mon serveur était incorrecte. Vérifiez l'URL de votre serveur !!
la source
J'ai eu la même erreur. Mais j'ai trouvé la solution.
NOTE 1: "Ce n'est pas une erreur Alarmofire", c'est une erreur de serveur.
REMARQUE 2: vous n'avez pas besoin de remplacer "responseJSON" par "responseString".
la source
C'est ainsi que j'ai réussi à résoudre l'erreur 3840 invalide.
Le journal des erreurs
Afin de connaître l'encodage, je devais parcourir tous les types d'encodage:
Si la réponse n'est pas un JSON & juste une chaîne dans la réponse, utilisez responseString
Exemple : en cas d'API de connexion / création de jeton:
la source
J'ai résolu en utilisant ceci comme en-tête:
let header = ["Content-Type": "application/json", "accept": "application/json"]
la source
Dans mon cas, il y avait un extra / dans l'URL.
la source
Il est peut-être trop tard mais j'ai résolu ce problème d'une autre manière non mentionnée ici:
Lorsque vous utilisez
.responseJSON()
, vous devez définir l'en-tête de réponse aveccontent-type = application/json
, sinon, il plantera même si votre corps est un JSON valide. Donc, peut-être que votre en-tête de réponse est vide ou utilise un autre type de contenu.Assurez - vous que votre tête de réponse est réglée avec
content-type = application/json
pour.responseJSON()
dans Alamofire travail correctement.la source
Hé les gars, c'est ce que j'ai trouvé être mon problème: j'appelais Alamofire via une fonction d'authentification des utilisateurs: j'ai utilisé la fonction "Login User" avec les paramètres qui seraient appelés depuis le "body" (email: String, password: String) qui serait passé
mon erreur était exactement:
optionnel (alamofire.aferror.responseserializationfailed (alamofire.aferror.responseserializationfailurereason.jsonserializationfailed (error domain = nscocoaerrordomain code = 3840 "valeur invalide autour du caractère 0." userinfo = {nsdebugdescription = valeur invalide autour du caractère 0)
le caractère 0 est la clé ici: ce qui signifie que l'appel pour le "email" ne correspondait pas aux paramètres: Voir le code ci-dessous
func loginUser (email: String, password: String, completed: @escaping downloadComplete) {let lowerCasedEmail = email.lowercased ()
"email" dans les paramètres de fonction doit correspondre au let "email" lors de l'analyse, alors cela fonctionnera .. Je n'ai plus eu l'erreur ... Et le caractère 0 était le "email" dans le paramètre "body" pour la requête Alamofire:
J'espère que cela t'aides
la source
J'envoyais le type incorrect (String) au serveur dans mes paramètres (devait être un Int).
la source
L'erreur a été résolue après l'ajout du codage: JSONEncoding.default avec Alamofire.
la source
L'application sur laquelle je travaillais ce matin avait la même erreur. Je pensais qu'il s'agissait d'une erreur côté serveur car je ne pouvais pas télécharger une image utilisateur.
Cependant, après avoir vérifié mon API personnalisée, j'ai réalisé qu'après avoir ajouté un certificat SSL à mon site Web que je n'avais pas mis à jour les URL api.swift, les données ne pouvaient pas publier:
J'ai changé les URL en https: //. Problème résolu.
la source
Dans mon cas, je dois ajouter cette clé: "Accepter": "application / json" à ma demande d'en-tête.
Quelque chose comme ça:
J'espère que cela peut aider quelqu'un.
la source
Je suis confronté au même problème et le problème est dans les paramètres.
companyModal.directory_path
est l'URL. il est forcé de passer d'une chaîne à une autre, ce qui crée des problèmes côté serveur. Pour résoudre ce problème, je dois donner une valeur par défaut qui en fait une valeur de chaîne.la source
Vous avez probablement "/" à la fin de votre chemin. S'il ne s'agit pas d'une requête GET, vous ne devez pas mettre "/" à la fin, sinon vous obtiendrez l'erreur
la source
J'ai changé mimeType de "mov" à "multipart / form-data".
A travaillé pour moi .. :)
la source
Pour mon cas:
J'ai oublié l'espace avant
\
(aprèsBearer
)la source
Dans mon cas, l'erreur était due à un e-mail en double. Vous pouvez revérifier votre API sur postman pour voir si la réponse est OK ou non.
la source