混合curls --data-binary 和编码 url-search 参数的能力

Sim*_*mon 4 curl

我想使用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我不想要的请求,因此已经有十几个关于此的问题(但没有一个涵盖我的情况):

...以及如何对正文url 部分进行编码的许多其他重复内容。

Dan*_*erg 6

你不能。(直到curl 7.87.0附带新的--url-query选项)

这些--data*选项用于构建请求正文,或者您可以要求curl 将它们全部作为查询参数放在URL 中(使用-G)。这些选项无法在单个命令行中同时构建这两个选项。

我的建议是“手动”构建 URL 并保留--data构建请求正文的选项,主要是因为 URL 部分往往更容易且更小。

直到你的机器上安装了curl 7.87.0,因为一旦安装,你就可以使用--url-query --data-urlencode幸福就会随之而来。