我想使用curl发出发布请求。正文是一个二进制文件,但我也希望curl 对 url 搜索参数进行编码。
curl --request POST \
--header 'Content-Type:application/octet-stream' \
--data-binary "@file.txt" \ # The body part, raw, not encoded
--data-urlencode "name=john" \ # The url-search-param part, encoded
"https://example.com"
Run Code Online (Sandbox Code Playgroud)
问题是,curl 将其视为--data-urlencode正文的一部分,我想要的是将其name=john附加到 url 部分,如下所示:https://example.com?name=john该--data-binary部分作为正文发送POST。(实际上,搜索参数是一个带有“无效”url 字符的字符串,需要对其进行编码)
--data-urlencodeTLDR:我想像发出请求一样使用GET(附加参数)并POST --data-binary设置实际POST主体。
快速的谷歌搜索为我提供了要使用的信息--get/-G但这会将请求转换为GET我不想要的请求,因此已经有十几个关于此的问题(但没有一个涵盖我的情况):
--data-binary内容成为 url 的一部分(?!)。POST- 是的,我想要那个,但也使用...发送二进制文件POST在我的情况下这是一个请求......--data-urlencode并--data-binary作为身体的一部分-X POST。看看答案的评论部分让我觉得这对curl来说是不可能的?!...以及如何对正文或url 部分进行编码的许多其他重复内容。
你不能。(直到curl 7.87.0附带新的--url-query选项)
这些--data*选项用于构建请求正文,或者您可以要求curl 将它们全部作为查询参数放在URL 中(使用-G)。这些选项无法在单个命令行中同时构建这两个选项。
我的建议是“手动”构建 URL 并保留--data构建请求正文的选项,主要是因为 URL 部分往往更容易且更小。
直到你的机器上安装了curl 7.87.0,因为一旦安装,你就可以使用--url-query , --data-urlencode幸福就会随之而来。
| 归档时间: |
|
| 查看次数: |
1369 次 |
| 最近记录: |