ChatGPT解决这个技术问题 Extra ChatGPT

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

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


d
derekerdmann

我相信您正在寻找 @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>" 作为单个字符串。
c
cookiedough

我知道问题已得到解答,但就我而言,我试图将文本文件的内容发送到 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://...
w
wbsnail

就我而言,@ 引起了某种编码问题,我仍然更喜欢我的旧方法:

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

这将导致大文件的“参数列表太长”错误
u
user17221689

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