it-swarm.com.de

Senden von JSON-Dateien in Curl-Anforderungen mit absoluten oder relativen Pfaden

Ich frage mich nur, wie ich einen Curl-Befehl mit der Option -d senden kann, der eine Datei mit Pfad angibt und keine Datei im aktuellen Verzeichnis.

Dies erhalte ich, wenn ich versuche, meine App mit der JSON-Datei im lokalen Verzeichnis zu testen. Sowohl die App als auch ich freuen uns:

curl -XPOST -H 'Content-Type:application/json' -d @all_fields.json http://testcomp.lab.net:8080/stats -v -s
* About to connect() to testcomp.lab.net port 8080
*   Trying 10.93.2.197... connected
* Connected to testcomp.lab.net (10.93.2.197) port 8080
> POST /stats HTTP/1.1
> User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Host: testcomp.lab.net:8080
> Accept: */*
> Content-Type:application/json
> Content-Length: 2882
> Expect: 100-continue
> 
< HTTP/1.1 100 Continue
HTTP/1.1 200 OK
< Content-Length: 0
* Connection #0 to Host testcomp.lab.net left intact
* Closing connection #0

Dies erhalte ich, wenn ich eine JSON-Datei in einem anderen Verzeichnis spezifiziere

curl -XPOST -H 'Content-Type:application/json' -d @json/all_fields.json http://testcomp.lab.net:8080/stats -v -s
"Invalid json for Java type interface Java.util.List"
Warning: Couldn't read data from file "json/all_fields.json", this makes an 
Warning: empty POST.

<snip snip>
<snip snip>

< HTTP/1.1 400 Bad Request
< Content-Type: application/json
< Transfer-Encoding: chunked
* Connection #0 to Host testcomp.lab.net left intact
* Closing connection #0

In der Manpage für Curl zum Angeben von Verzeichnissen für Dateien, die als Daten übergeben wurden, wurde nichts angezeigt. Bin ich leider auf Dateien im lokalen Verzeichnis beschränkt oder gibt es eine spezielle Möglichkeit, Dateien in verschiedenen Verzeichnissen anzugeben? Vielen Dank im Voraus für Ihre Hilfe.

27
Classified

Die Befehlsoption -d @ Akzeptiert jeden auflösbaren Dateipfad, solange der Pfad tatsächlich existiert. Sie könnten also Folgendes verwenden:

  • ein Pfad relativ zum aktuellen Verzeichnis
  • ein voll qualifizierter Pfad
  • ein Pfad mit Softlinks
  • und so weiter

Genau wie Hunderte anderer * Nix-Befehle. Ein kurzer Hinweis: Die Option -d Versucht, Ihre Daten per URL zu verschlüsseln, was von dem, was Sie beschreiben, eigentlich nicht das ist, was Sie wollen. Sie sollten stattdessen die Option --data-binary Verwenden. Etwas wie das:

curl -XPOST
     -H 'Content-Type:application/json'
     -H 'Accept: application/json'
     --data-binary @/full/path/to/test.json
     http://localhost:8080/easy/eservices/echo -v -s
50
Perception