我使用cURL命令行实用程序发送HTTP POST到web服务。我想将一个文件的内容作为POST的主体实体。我已经尝试使用-d </path/to/filename>以及其他具有类型信息的变体,如——data </path/to/filename>——data-urlencode </path/to/filename>等…该文件始终是附加的。我需要它作为肉体实体。


当前回答

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

剥离新线路

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

保持新的台词

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

Curl将从文件中剥离所有换行符。如果你想要完整地发送换行文件,使用——data-binary代替——data

其他回答

我知道这个问题已经得到了回答,但在我的情况下,我试图将一个文本文件的内容发送到Slack Webhook api,由于某种原因,上面的答案没有工作。不管怎样,这就是最终让我成功的原因:

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

curl https://upload.box.com/api/2.0/files/3300/content -H "授权:持有者$access_token" -F file=@"C:\Crystal Reports\Crystal Reports\mysales.pdf"

在我的例子中,@导致了某种编码问题,我仍然喜欢我的旧方法:

curl -d "$(cat /path/to/file)" https://example.com

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

剥离新线路

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

保持新的台词

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

Curl将从文件中剥离所有换行符。如果你想要完整地发送换行文件,使用——data-binary代替——data