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


207

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

Answers:


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 )` @-告诉curl从stdin读取。您也可以只使用重定向(< x.txt )来放置任何所需的内容。如果您正在使用bash。
2015年

62
curl将从文件中删除所有换行符。如果您要发送的文件带有完整的换行符,请使用--data-binary代替--data
克里斯(Chris)

现在,如何添加登录凭据来授权此请求?
anon58192932

@ anon58192932-这取决于服务器的安全协议。如果使用的是name:value对,例如用户名和密码,则添加与服务预期匹配的必要标头: --header: "<header_name>:<header_value>"作为单个字符串。
罗伊·欣克利

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

这不会将点转换为下划线(。-> _),并保留换行符。谢谢!
拉蒙·芬肯

1
很酷,但是它不能回答问题,因为文件是在命令行上分解的,而不是为curl指定的。我还想知道是否需要转义所有shell的特殊字符-但我对此并不了解;)
Gerard ONeill

谢谢,您救了我的命!
aryswisnu

对于庞大的内容文件,无法进行卷曲,curl: argument list too long在这种情况下,可接受的答案是救生员curl --data "@/path/to/filename" http://...
另一个编码器
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.