Je peux créer un lieu avec succès via curl
en 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 renvoie 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"]
}
Donc, je modifie la commande pour qu'elle soit exécutée comme ceci:
$ curl -vX POST http://server/api/v1/places.json -d @testplace.json
Cela échoue en renvoyant HTTP/1.1 401 Unauthorized
. Pourquoi?
curl
envoie POST demandes avec le type de contenu par défaut application/x-www-form-urlencoded
. Si vous souhaitez envoyer une demande JSON, vous devrez spécifier le bon en-tête de type de contenu:
$ curl -vX POST http://server/api/v1/places.json -d @testplace.json \
--header "Content-Type: application/json"
Mais cela ne fonctionnera que si le serveur accepte l’entrée json. Le .json
à la fin de l'URL peut uniquement indiquer que le sortie est json, cela ne signifie pas nécessairement qu'il gérera également json entrée. La documentation de l'API devrait vous indiquer si c'est le cas ou non.
La raison pour laquelle vous obtenez un 401
et non une autre erreur est probablement due au fait que le serveur ne peut pas extraire le auth_token
de votre demande.