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

Posted

技术标签:

【中文标题】如何使用 cURL 将文件内容作为正文实体发送【英文标题】:How to send file contents as body entity using cURL 【发布时间】:2013-04-01 12:45:20 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

换行

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

保留新行

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

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

【讨论】:

如果你想要真正的花哨,你可以这样做:cat file.txt | curl --data "@-" `(< url.txt )` @- 告诉 curl 从标准输入读取。您也可以使用重定向 (< x.txt ) 来输入您想要的任何内容。如果您使用的是 bash。 curl 将从文件中删除所有换行符。如果要发送带有完整换行符的文件,请使用 --data-binary 代替 --data 现在如何添加登录凭据来授权此请求? @anon58192932 - 这取决于服务器的安全协议。如果您使用 name:value 对,例如用户名和密码,则添加与服务期望匹配的必要标头:--header: "<header_name>:<header_value>" 作为单个字符串。【参考方案2】:

我知道问题已得到解答,但在我的情况下,我试图将文本文件的内容发送到 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 指定的。我还想知道是否所有 shell 的特殊字符都需要转义——但我对此知之甚少;) 对于一个巨大的内容文件,上面的 curl 不起作用,curl: argument list too long 在这种情况下接受的答案是救生员curl --data "@/path/to/filename" http://...【参考方案3】:

在我的情况下,@ 引起了某种编码问题,我仍然更喜欢我的旧方式:

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

【讨论】:

这会导致大文件出现“参数列表太长”的错误【参考方案4】:

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

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于如何使用 cURL 将文件内容作为正文实体发送的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Windows 批处理脚本中的 curl 发送带有 json 正文的 POST 请求

在电子邮件正文中发送带有动态内容的图像

Echo curl 请求标题和正文而不发送它?

如何在 Swift 中使用 Alamofire 将参数作为正文发送到 PUT 方法

如何将 Retrofit POST 正文作为 JSON 字符串发送?

如何通过 curl 在 url 中发送文件?