2012-09-25 11 views
11

Ich versuche, die cat Ausgang passieren zu locken:Verwendung Rohr für curl Daten

$ cat file | curl --data '{"title":"mytitle","input":"-"}' http://api 

Aber input ist buchstäblich ein -.

+0

Ich bin nicht sicher, ob es ein spezielles Format hier ist, sonst könnte das sein, was Sie wollen: http://serverfault.com/questions/313599/how-doi-i-pipe-the-output-of-uptime-df-to-curl – thomasa88

Antwort

6

Versuchen

curl --data '{"title":"mytitle","input":"'$(cat file)'-"}' http://api 
30

ich eine Weile lang versucht, dies herauszufinden und bekam arbeiten sie mit folgendem:

cat data.json | curl -H "Content-Type: application/json" -X POST -d @- http://api 
+0

Das Problem ist der Inhalt der Datei wird der Wert sein "Eingabe" in den JSON-Daten. – Michelle

6

Sie können die magische stdin-Datei verwenden /dev/stdin

cat data.json | curl -H "Content-Type: application/json" -X POST -d "$(</dev/stdin)" http://api 
2

Dies sollte auch funktionieren

curl -H "Content-Type: application/json" -d @data.json http://api 

Die Verwendung von -d erzwingt die Verwendung von curl, um implizit POST für die Anforderung zu verwenden.

0

Curl documentation for -d option

Wenn Sie die Daten mit dem Buchstaben @ beginnen, sollte der Rest ein Dateiname sein, die Daten zu lesen, aus, oder - wenn Sie locken wollen die Daten von stdin zu lesen. Mehrere Dateien können ebenfalls angegeben werden. Das Veröffentlichen von Daten aus einer Datei namens "foobar" würde also mit -d, --data @foobar erfolgen. Wenn --data angewiesen wird, aus einer Datei wie diesem zu lesen, werden Zeilenumbrüche und Zeilenumbrüche entfernt. Wenn Sie nicht möchten, dass das Zeichen @ eine spezielle Interpretation hat, verwenden Sie stattdessen --data-row.

Abhängig von Ihrem HTTP-Endpunkt, Serverkonfiguration, sollten Sie mit Hilfe dieses Formats gut sein:

curl -d @data.json http://api