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
だと改行されていないのはこれで見つけた。