Edited at

コマンドの出力をそのままcurlでPOSTする

More than 3 years have passed since last update.

man page にこのように書いてある。

To read content from stdin instead of a file, use - as the filename. This goes for both @ and < constructs.

curlでファイル名を指定するのは --data @file のようにするので、ファイル名部分を - にするということは --data @- にするということだそうな。

--data だと改行がなくなってしまうので、--data-binary にすると標準出力そのまま送信できる。

echo "foo\nbar\nbaz" | curl --data-binary @- 'http://localhost:6666/'

どういうデータが送信されているかを見るにはncコマンドが便利

これで立ち上げておいて、

nc -l 6666

上のcurlコマンドを実行するとこのように出る。

POST / HTTP/1.1

User-Agent: curl/7.30.0
Host: localhost:6666
Accept: */*
Content-Length: 12
Content-Type: application/x-www-form-urlencoded

foo
bar
baz

--data だと改行されていないのはこれで見つけた。