curlで改行を送信するために次のことを試みましたが、curl\n
によって解釈されません。
curl -X PUT -d "my message\n" http://localhost:8000/hello
カールで改行を送信するにはどうすればよいですか?
回答:
逐語的に送信されるデータを提供したい場合があります。
--data-binary
オプションは、それを行います。
-d @message.txt
特に他の回答で提案されているように使用する代わりに、改行を変更することができます。--data-binary
:(あなたがマルチパート/フォームデータのためのあなたのCRLFの改行を維持する必要がある場合に重要である、表示されません一方stackoverflow.com/questions/10765243/...)
curl -H "Content-Type:text/plain" --data-binary "$(<myfile)" http://localhost:8888
curl --data-binary @/path/to/file.txt http://example.com/target
あなたのシェルを通過している\
が続くn
のではなく、カールするのではなく、改行"my message\n"
。Bashは\n
、やのようなエスケープシーケンスをサポートする別の文字列構文をサポートしています\t
。これを使用するには、文字列をで開始し、文字$'
列を'
:で終了します。
curl -X PUT -d $'my message\n' http://localhost:8000/hello
my message\n
ではなく、シェルは逐語的に通過します。
my message\n
は、私が言及しているものと同じだと思います"my message\n"
。
\n
JavaScriptとは何の関係もありません。実際、ここではJavaScriptとは何の関係もありません。
はるかに簡単な方法があります!
curl -X PUT -d $'my message\n' http://localhost:8000/hello
これは、ANSI-CQuotingを使用して改行文字を挿入します。
配管もデータファイルもありません。cURLを使用した改行の送信も参照してください。
ファイルを使用したくない、そしてシェルエスケープマジックに頼りたくない人のための解決策は次のとおりです。
curl -X POST --data-binary @- http://url.com <<EOF
line one
line two
EOF
ただし、これはポストデータペイロードの文字通りの改行であり、フォームフィールドではありません。
@
はファイル名を示すことだと思いますが、使用するときに特別な意味はあり@-
ますか?何し<<EOF
てるの?
@-
の標準からの入力を消費するようにcurlに<<EOF
指示し、bashのストリーム終了インジケーターです。次にEOF
、データペイロードのマジックワードを使用して、ストリームへの書き込みが完了したことをbashに通知します。
-
ファイル名が必要なときにSTDINを指定するGNU / Linuxの標準的な方法の一種です。それは普遍的ではありませんが、かなり一般的です。
同様の問題がありました。Macからクラウドストレージにcsvファイルをアップロードしているときに、新しい行が削除されていました。ダウンロードした後、ファイル全体が1行のように見えました。異なる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"
--data-binary @
ことで問題が解決しました(複数行の.icsファイルをCalDAVサーバーに送信)。
(私はここで少し異なる質問に終わったので、将来の探検家に役立つかもしれないので、答えを投稿するつもりです)
私のソリューションは、フォームスタイルのデータ、つまりクエリ文字列のキーと値のペアを送信するユーザーに適用されます。%0A
エンコードされたスペースと同じように、エンコードされた改行を使用し%20
ます。http://meyerweb.com/eric/tools/dencoder/を使用できますをして、他のシンボルを変換。
したがって、キーmessage
を値に設定する場合は、次のようにします。
line one
another
あなたが送るだろう
curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
あなたの質問への答えではありませんが、メッセージと改行を含む一時ファイルを作成して回避し、そのファイルをcurlに与えて作業します。
curl -X PUT -d @message.txt http://localhost:8000/hello
マニュアルから:
データを文字@で始める場合、残りはデータを読み取るためのファイル名である必要があります。または、curlでstdinからデータを読み取る場合は-です。ファイルの内容はすでにURLエンコードされている必要があります。複数のファイルを指定することもできます。したがって、「foobar」という名前のファイルからのデータの投稿は、-data @ foobarを使用して行われます。
--data-binary
は-d
、データを逐語的に送信するため、のより忠実な代替手段です。
-d @/path/to/temp/file.txt
改行の問題は解決されません。--data-binary
上記を参照してください。
https://sendgrid.com/docs/API_Reference/Web_API_v3/index.htmlで最初に見つかったこのコード(以下にコピー)でSendgridを使用していました
\n\n
Gmailで動作しました\n
が、無視されました。私はエスケープと他の提案を2倍にしようとしました。私も試し\r\n
ましたが、Gmailでも機能しませんでした。注:他のメールクライアントをわざわざテストしませんでした。Gmail固有の問題だった可能性があります。
curl --request POST \
--url https://api.sendgrid.com/v3/mail/send \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{"personalizations": [{"to": [{"email": "your.email@example.com"}]}],"from": {"email": "example@example.com"},"subject": "Hello, World!","content": [{"type": "text/plain", "value": "Heya!"}]}'
結局私は解決策を探してあきらめたと切り替えtext/plain
にtext/html
だけ使用<br />
タグ。
トラッキングピクセルが有効になっている場合、SendgridがプレーンテキストをHTMLに変換することを誰かが提案しました。これは理にかなっています。たぶん、改行は平文からHTMLへの変換プロセスで破壊されました。クライアントがトラッキングピクセルを望んでいると思うので、HTMLに切り替えることにしました。