如何使用cURL将文件内容作为正文实体发送

Roy*_*ley 180 post curl

我正在使用cURL命令行实用程序将HTTP POST发送到Web服务.我想将文件的内容包含在POST的正文实体中.我已尝试使用-d </path/to/filename>类似信息的其他变体--data </path/to/filename> --data-urlencode </path/to/filename>等...文件始终附加.我需要它作为身体实体.

小智 306

我相信你正在寻找@filename语法,例如:

剥离新线

curl --data "@/path/to/filename" http://...
Run Code Online (Sandbox Code Playgroud)

保持新的路线

curl --data-binary "@/path/to/filename" http://...
Run Code Online (Sandbox Code Playgroud)

=====

curl将从文件中删除所有换行符.如果要完整地发送带有换行符的文件,请使用--data-binary--data代替

  • curl将从文件中删除所有换行符.如果要完整地发送带有换行符的文件,请使用`--data-binary`代替`--data`. (61认同)
  • 如果你想真正想要你可以这样做:`cat file.txt | curl --data"@ - "\`(<url.txt)\```@ -`告诉curl从stdin读取.您也可以使用重定向`(<x.txt)`放入您想要的任何内容.如果你正在使用bash. (18认同)

coo*_*ugh 9

我知道问题已得到解答,但在我的情况下,我试图将文本文件的内容发送到Slack Webhook api,由于某种原因,上述答案无效.Anywho,这就是我最终的诀窍:

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

  • 对于一个巨大的内容文件,上面的curl将不起作用,“curl:参数列表太长”在这种情况下接受的答案是救星“curl --data“@/path/to/filename”http://... ` (2认同)

wbs*_*wjc 8

就我而言,@导致了某种编码问题,我仍然更喜欢我的旧方式:

curl -d "$(cat /path/to/file)" https://example.com
Run Code Online (Sandbox Code Playgroud)

  • 这将导致大文件出现“参数列表太长”错误 (10认同)