Dans mon application Ruby sur Rails, j'ai essayé de télécharger une image par l'intermédiaire du POSTMAN RESTE client au format Base64 . Lorsque je POST l'image, je reçois une réponse 406 non acceptable . Lorsque j'ai vérifié ma base de données, l'image était là et a été enregistrée avec succès.
Quelle est la raison de cette erreur, dois-je spécifier quelque chose dans mon en-tête?
Ma demande:
URL --- http://localhost:3000/exercises.json
Entête:
Content-Type - application/json
Données brutes:
{
"exercise": {
"subbodypart_ids": [
"1",
"2"
],
"name": "Exercise14"
},
"image_file_name": "Pressurebar Above.jpg",
"image":"******base64 Format*******"
}
Votre opération n'a pas échoué.
Votre service principal dit que le type de réponse qu'il renvoie n'est pas fourni dans l'en-tête HTTP Accepter de votre demande client.
Réf.: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
406 Non acceptable La ressource identifiée par la demande est uniquement capable de générer des entités de réponse dont les caractéristiques de contenu ne sont pas acceptables en fonction des en-têtes d'acceptation envoyés dans la demande.
406 se produit lorsque le serveur ne peut pas répondre avec l'en-tête accept spécifié dans la demande. Dans votre cas, il semble que application/json pour la réponse ne soit pas acceptable pour le serveur.
Vous avez mentionné que vous utilisiez Ruby sur Rails en tant que backend. Vous n'avez pas posté le code de la méthode correspondante, mais je suppose que cela ressemble à quelque chose comme ceci:
def create
post = Post.create params[:post]
respond_to do |format|
format.json { render :json => post }
end
end
Changez le en:
def create
post = Post.create params[:post])
render :json => post
end
Et cela résoudra votre problème. Cela a fonctionné pour moi :)
"Parfois", cela peut signifier que le serveur avait une erreur interne et qu'il voulait répondre par un message d'erreur (ex: 500 avec une charge JSON), mais comme les en-têtes de requête ne disaient pas qu'il acceptait JSON, il renvoyait un 406 à la place. Allez comprendre. (dans le cas présent: webapp de démarrage de printemps).
Dans ce cas, votre opération a échoué. Mais le message d'échec a été obscurci par un autre.
Vous pouvez également recevoir une réponse 406 lorsque des cookies non valides sont stockés ou référencés dans le navigateur - par exemple, lors de l'exécution d'un serveur Rails en mode Dev localement.
Si vous exécutez deux projets différents sur le même port, le navigateur peut faire référence à un cookie provenant d'une session localhost différente.
Cela m'est arrivé ... m'a fait trébucher pendant une minute. Rechercher dans le navigateur> Mode développeur> Le réseau l'a montré.
Dans mon cas, j'ai ajouté:
Content-Type: application/x-www-form-urlencoded
résolu mon problème complètement.
const request = require('request');
const headers = {
'Accept': '*/*',
'User-Agent': 'request',
};
const options = {
url: "https://example.com/users/6",
headers: headers
};
request.get(options, (error, response, body) => {
console.log(response.body);
});