it-swarm.com.de

Wie übergebe ich Payload per JSON-Datei für Curl?

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?

174
JJD

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.

283
mata