2012-09-25 12 views
11

Próbuję przekazać wyjście cat zwijają:stosowanie rur danych curl

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

Ale input jest dosłownie -.

+0

Nie jestem pewien, czy istnieje specjalny format tutaj, w przeciwnym razie może to być co chcesz: http://serverfault.com/questions/313599/how-do-i-pipe-the-output-of-uptime-df-to-curl – thomasa88

Odpowiedz

6

Spróbuj

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

Spędziłem trochę czasu próbuje dowiedzieć się tego, ale to praca z następujących czynności:

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

Problem polega na tym, że zawartość pliku będzie wartością 'input' w danych JSON. – Michelle

6

Można użyć magicznego pliku stdin /dev/stdin

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

To powinno również działać

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

Użycie opcji -d wymusza zwijanie, aby niejawnie używać testu POST dla żądania.

0

Curl documentation for -d option

Jeśli zaczniesz dane z literą @, reszta powinna być nazwa pliku do odczytu danych z, lub - jeśli chcesz zwijają do odczytu danych ze standardowego wejścia. Można również określić wiele plików. Publikowanie danych z pliku o nazwie "foobar" byłoby więc wykonane z opcją -d, --data @foobar. Kiedy -data ma odczytać taki plik, powraca karetka, a znaki nowej linii zostaną usunięte. Jeśli nie chcesz, aby znak @ miał specjalną interpretację, użyj zamiast niego --data-raw.

W zależności od Twojego punktu końcowego HTTP, konfiguracja serwera, powinno być dobrze za pomocą tego formatu:

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