【问题标题】:How to urlencode url params with a curl POST but not urlencode the body data?如何使用 curl POST 对 url 参数进行 urlencode 但不对正文数据进行 urlencode?
【发布时间】:2018-09-14 15:13:53
【问题描述】:

当使用 ... | curl -XPOST --data @- https://example.com/ 之类的东西进行 curl POST 调用时,我可以在命令行上对一些 url 参数进行 url 编码(使用 curl 本身,而不是 bash 函数),而不必自己编码它们并将它们放在 curl 的 url 参数中?

所以我希望 POST 正文 不被 urlencoded,但 url 参数 在同一个 curl 命令中进行 url 编码。

例如:

echo '{"username":"a","password": [1,2]}' | curl --header "Content-Type: application/json" --request POST -d@- --data-urlencode "filter=." http://localhost:8080

似乎没有做我想做的事,我在我的https://localhost:8080/ url 后缀?filter...,我宁愿避免在参数需要大量编码的情况下。

【问题讨论】:

    标签: shell curl


    【解决方案1】:

    您可以使用--data-urlencode 选项:

    ... | curl -s -X POST --data @- --data-urlencode "filter=ab&123" <url>
    

    根据man curl

    --data-urlencode &lt;data&gt;
    (HTTP) 这会发布数据,与其他 -d--data 选项类似,只是它执行 URL 编码。

    【讨论】:

    • 问题是我不想对数据进行编码,只有一些 url 参数。所以我想要两种行为同时
    • 我认为这与我所追求的相反,编辑了我的问题。 JSON 将通过标准输入,然后我不想自己转义 url 参数。
    • --data-urlencode 负责对您的数据进行编码。使用以下 2 个选项进行测试:--data-urlencode "filter=ab&amp;123",然后是 --data "filter=ab&amp;123",您会注意到差异。 ab&amp;123 仅在您使用 -data-urlencode 时正确编码为 filter=ab%26123,但在您使用 --data 时不会正确编码
    • “我从来没有在没有验证过自己的情况下发布任何答案”我很抱歉 - 我应该对如此高的代表用户抱有同样的期望 - 只是试图围绕我所看到的并想确定- 我应该更仔细地措辞。非常感谢您的帮助!
    • 所以离开你的粘贴箱,我想我希望看到的是'POST /post.php?filter=.user%23name HTTP/1.1,然后 JSON 就是帖子正文。
    猜你喜欢
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2010-10-09
    • 2015-03-09
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    相关资源
    最近更新 更多