Ich kann erfolgreich einen Ort erstellen, curl
indem ich den folgenden Befehl ausführe:
$ 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 \
"
Der Server kehrt zurück HTTP/1.1 201 Created
.
Jetzt möchte ich die Nutzdaten in einer JSON-Datei speichern, die folgendermaßen aussieht:
// 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"]
}
Also ändere ich den auszuführenden Befehl wie folgt:
$ curl -vX POST http://server/api/v1/places.json -d @testplace.json
Dies kann nicht zurückgegeben werden HTTP/1.1 401 Unauthorized
. Warum?
--data-binary
.Antworten:
curl
sendet POST-Anfragen mit dem Standardinhaltstypapplication/x-www-form-urlencoded
. Wenn Sie eine JSON-Anfrage senden möchten, müssen Sie den richtigen Inhaltstyp-Header angeben:Dies funktioniert jedoch nur, wenn der Server JSON-Eingaben akzeptiert. Das
.json
am Ende der URL kann nur anzeigen, dass die Ausgabe json ist. Dies bedeutet nicht unbedingt, dass auch die json- Eingabe verarbeitet wird . Die API-Dokumentation sollte Ihnen einen Hinweis geben, ob dies der Fall ist oder nicht.Der Grund, warum Sie einen
401
und keinen anderen Fehler erhalten, liegt wahrscheinlich darin, dass der Server den Fehler nichtauth_token
aus Ihrer Anfrage extrahieren kann .quelle
cat file.json
nach dem zu verwenden-d
und hatte Probleme damit, bis ich aus dieser Antwort gelernt habe, dass ich verwenden kann@file.json
. Danke :)-H
/--header
mehrfach angeben müssen , zumindest wenn Sie in Bash unter Ubuntu getestet wurden.