cURLを使用してファイルコンテンツを本文エンティティとして送信する方法


207

cURLコマンドラインユーティリティを使用して、HTTP POSTをWebサービスに送信しています。ファイルの内容をPOSTの本体エンティティとして含めたいのですが。私は等の-d </path/to/filename>タイプ情報を持つ他のバリアントを使用してみました--data </path/to/filename> --data-urlencode </path/to/filename>...ファイルは常に添付されています。ボディエンティティとして必要です。

回答:


338

私はあなたが@filename構文を探していると信じています、例えば:

新しい行を取り除く

curl --data "@/path/to/filename" http://...

新しい行を保つ

curl --data-binary "@/path/to/filename" http://...

=====

curlはファイルからすべての改行を削除します。改行を変更せずにファイルを送信する場合--data-binaryは、-dataの代わりに使用します


21
あなたが本当の空想になりたいなら、あなたはそうすることができます:cat file.txt | curl --data "@-" `(< url.txt )` @-stdinから読むようにcurlに伝えます。リダイレクト(< x.txt )を使用して、必要なものを配置することもできます。bashを使用している場合。
ブリードリー、2015

62
curlはファイルからすべての改行を削除します。改行を変更せずにファイルを送信する場合は--data-binary、の代わりに使用し--dataます。
Chris

このリクエストを承認するためにログイン資格情報をどのように追加しますか?
anon58192932 2017

@ anon58192932-サーバーのセキュリティプロトコルによって異なります。name:valueユーザー名とパスワードなどのペアを使用している場合は、サービスが期待するものと一致する必要なヘッダーを--header: "<header_name>:<header_value>"単一の文字列として追加し ます。
ロイヒンクリー2017

19

質問には回答済みですが、私の場合、テキストファイルのコンテンツをSlack Webhook API に送信しようとしていましたが、何らかの理由で上記の回答が機能しませんでした。とにかく、これが私にとって最後にトリックをしたものです:

curl -X POST -H --silent --data-urlencode "payload={\"text\": \"$(cat file.txt | sed "s/\"/'/g")\"}" https://hooks.slack.com/services/XXX

これはドットをアンダースコア(。-> _)に変換せず、改行を保持します。ありがとう!
Ramon Fincken、

1
すばらしいですが、ファイルはcurlに指定されるのではなく、コマンドラインで展開されるため、質問の答えにはなりません。シェルのすべての特殊文字をエスケープする必要があるかどうかも疑問に思っています-しかし、それについてはよくわかりません;)
Gerard ONeill

ありがとう、あなたは私の命を救った!
aryswisnu

巨大なコンテンツファイルの場合、上記のカールは機能しません。curl: argument list too longその場合、受け入れられる答えはライフセーバーですcurl --data "@/path/to/filename" http://...
別のコーダー

0

私の場合、@何らかのエンコードの問題が発生しましたが、私はまだ古い方法を好みます:

curl -d "$(cat /path/to/file)" https://example.com
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.