Ich kann einen Ort erfolgreich über curl
erstellen, 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 gibt HTTP/1.1 201 Created
Zurück.
Nun möchte ich die Nutzdaten in einer JSON-Datei speichern, die so 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 schlägt fehl, HTTP/1.1 401 Unauthorized
Zurückzugeben. Warum?
curl
sendet POST Anforderungen mit dem Standardinhaltstyp application/x-www-form-urlencoded
. Wenn Sie eine json-Anforderung senden möchten, müssen Sie den richtigen Inhaltstyp-Header angeben :
$ curl -vX POST http://server/api/v1/places.json -d @testplace.json \
--header "Content-Type: application/json"
Dies funktioniert jedoch nur, wenn der Server JSON-Eingaben akzeptiert. Das .json
Am Ende der URL zeigt möglicherweise nur an, dass Ausgabe json ist. Dies bedeutet nicht unbedingt, dass auch 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, ist wahrscheinlich, dass der Server den auth_token
Nicht aus Ihrer Anfrage extrahieren kann.