web-dev-qa-db-ja.com

curlで改行を送信する方法は?

Curlで改行を送信するために次のことを試みましたが、\nはcurlによって解釈されません。

curl -X PUT -d "my message\n" http://localhost:8000/hello

Curlで改行を送信するにはどうすればよいですか?

80
deamon

データをそのまま送信する場合があります。

--data-binaryオプションはそれを行います。

98
Szocske

シェルは、\ではなく"my message\n"に続いて、カールする改行ではなくnを渡します。 Bashは、\n\tなどのエスケープシーケンスをサポートする別の文字列構文をサポートしています。使用するには、文字列を$'で開始し、文字列を'で終了します。

curl -X PUT -d $'my message\n' http://localhost:8000/hello

BashリファレンスマニュアルANSI-C引用 を参照==

36
Benjamin Atkin

ファイルを使用したくなく、シェルエスケープマジックに頼りたくない人のためのソリューションは次のとおりです。

curl -X POST --data-binary @- http://url.com <<EOF
line one
line two
EOF

しかし、これは投稿データペイロード内のリテラルの改行であり、フォームフィールドではありません。

15
Jammer

もっと簡単な方法があります!

curl -X PUT -d $'my message\n' http://localhost:8000/hello

これは ANSI-C Quoting を使用して改行文字を挿入します。

配管もデータファイルもありません。 cURLでの改行の送信 も参照してください。

13
Dave Kerr

(私はここでわずかに異なる質問で終わったので、将来の探検家を助けるかもしれないので私の答えを投稿するつもりです)

私のソリューションは、フォームスタイルのデータ、つまりクエリ文字列のキー/値のペアを送信する人に適用されます。エンコードされた改行(%0A、エンコードされたスペースが%20http://meyerweb.com/eric/tools/dencoder/ を使用して、他のシンボルを変換できます。

したがって、キーmessageを値に設定する場合:

line one
another

あなたが送るだろう

curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
6
MalcolmOcean

同様の問題がありました。 csvファイルをMacからクラウドストレージにアップロードする際に、新しい行が削除されていました。それをダウンロードした後、ファイル全体が一行のように見えました。別のEOL文字「\ n」「\ r」「\ r\n」を追加しようとしましたが、成功しませんでした。 「-d」の代わりに「--data-binary」を使用すると、問題が解決しました。ところで、この問題はMacからのみ発生しました。 CentOSマシンから呼び出しを行う際、「-d」は問題なく機能しました。これは、Macの改行文字によるものです。しかし、これ以上デバッグする気はありません。

ご協力ありがとうございます。

curl -X PUT -d @filename.csv https://cloudstorage -H "content-type: text/csv"

VS

curl -X PUT --data-binary @filename.csv https://cloudstorage -H "content-type: text/csv"
3
SutuwaShell

あなたの質問への答えではありませんが、メッセージと改行を含む一時ファイルを作成することで回避し、そのファイルを処理するカールを与えます:

curl -X PUT -d @message.txt http://localhost:8000/hello

manual から:

データを文字@で開始する場合、残りはデータを読み取るファイル名であるか、または-curlでstdinからデータを読み取る場合です。ファイルのコンテンツは、すでにURLエンコードされている必要があります。複数のファイルを指定することもできます。したがって、「foobar」という名前のファイルからデータをポストするには、-data @foobarを使用します。

3
Pekka 웃

非常に簡単な方法で、コンソールでShiftキーを押しながらEnterキーを押すだけです。非常に読みやすく入力することもできます。

curl -d "line1
line2" http-echo.com

Server gets this: line1\nline2

これを実行して、改行を削除します。

curl -d "line1 \
line2" http-echo.com

Server gets this: line1 line2
2
John Williams