如何使用 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 请求
如何在 Swift 中使用 Alamofire 将参数作为正文发送到 PUT 方法