Curlで改行を送信するために次のことを試みましたが、\n
はcurlによって解釈されません。
curl -X PUT -d "my message\n" http://localhost:8000/hello
Curlで改行を送信するにはどうすればよいですか?
データをそのまま送信する場合があります。
--data-binary
オプションはそれを行います。
シェルは、\
ではなく"my message\n"
に続いて、カールする改行ではなくn
を渡します。 Bashは、\n
や\t
などのエスケープシーケンスをサポートする別の文字列構文をサポートしています。使用するには、文字列を$'
で開始し、文字列を'
で終了します。
curl -X PUT -d $'my message\n' http://localhost:8000/hello
BashリファレンスマニュアルANSI-C引用 を参照==
ファイルを使用したくなく、シェルエスケープマジックに頼りたくない人のためのソリューションは次のとおりです。
curl -X POST --data-binary @- http://url.com <<EOF
line one
line two
EOF
しかし、これは投稿データペイロード内のリテラルの改行であり、フォームフィールドではありません。
もっと簡単な方法があります!
curl -X PUT -d $'my message\n' http://localhost:8000/hello
これは ANSI-C Quoting を使用して改行文字を挿入します。
配管もデータファイルもありません。 cURLでの改行の送信 も参照してください。
(私はここでわずかに異なる質問で終わったので、将来の探検家を助けるかもしれないので私の答えを投稿するつもりです)
私のソリューションは、フォームスタイルのデータ、つまりクエリ文字列のキー/値のペアを送信する人に適用されます。エンコードされた改行(%0A
、エンコードされたスペースが%20
。 http://meyerweb.com/eric/tools/dencoder/ を使用して、他のシンボルを変換できます。
したがって、キーmessage
を値に設定する場合:
line one
another
あなたが送るだろう
curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
同様の問題がありました。 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"
あなたの質問への答えではありませんが、メッセージと改行を含む一時ファイルを作成することで回避し、そのファイルを処理するカールを与えます:
curl -X PUT -d @message.txt http://localhost:8000/hello
manual から:
データを文字@で開始する場合、残りはデータを読み取るファイル名であるか、または-curlでstdinからデータを読み取る場合です。ファイルのコンテンツは、すでにURLエンコードされている必要があります。複数のファイルを指定することもできます。したがって、「foobar」という名前のファイルからデータをポストするには、-data @foobarを使用します。
非常に簡単な方法で、コンソールで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