Je peux créer un lieu avec succès en curl
exécutant la commande suivante:
$ curl -vX POST https://server/api/v1/places.json -d "
auth_token=B8dsbz4HExMskqUa6Qhn& \
place[name]=Fuelstation Central& \
place[city]=Grossbeeren& \
place[address]=Buschweg 1& \
place[latitude]=52.3601& \
place[longitude]=13.3332& \
place[washing]=true& \
place[founded_at_year]=2000& \
place[products][]=diesel& \
place[products][]=benzin \
"
Le serveur revient HTTP/1.1 201 Created
.
Maintenant, je veux stocker la charge utile dans un fichier JSON qui ressemble à ceci:
// testplace.json
{
"auth_token" : "B8dsbz4HExMskqUa6Qhn",
"name" : "Fuelstation Central",
"city" : "Grossbeeren",
"address" : "Buschweg 1",
"latitude" : 52.3601,
"longitude" : 13.3332,
"washing" : true,
"founded_at_year" : 2000,
"products" : ["diesel","benzin"]
}
Je modifie donc la commande à exécuter comme ceci:
$ curl -vX POST http://server/api/v1/places.json -d @testplace.json
Cela ne revient pas HTTP/1.1 401 Unauthorized
. Pourquoi?
--data-binary
.Réponses:
curl
envoie des requêtes POST avec le type de contenu par défaut deapplication/x-www-form-urlencoded
. Si vous souhaitez envoyer une demande JSON, vous devrez spécifier l'en-tête de type de contenu correct:Mais cela ne fonctionnera que si le serveur accepte l'entrée json. La
.json
fin de l'URL peut seulement indiquer que la sortie est json, cela ne signifie pas nécessairement qu'elle gérera également l' entrée json . La documentation de l'API devrait vous donner une indication sur le fait qu'elle le fasse ou non.La raison pour laquelle vous obtenez une
401
erreur et non une autre est probablement parce que le serveur ne peut pas extraire leauth_token
de votre demande.la source
cat file.json
après le-d
et avais du mal avec, jusqu'à ce que j'apprenne de cette réponse que je peux utiliser@file.json
. Merci :)-H
/--header
plusieurs fois, au moins lors des tests en bash sur Ubuntu.