使用带有编码 URL 的 CURL 删除
Posted
技术标签:
【中文标题】使用带有编码 URL 的 CURL 删除【英文标题】:DELETE using CURL with encoded URL 【发布时间】:2012-09-25 23:20:03 【问题描述】:我正在尝试像这样使用 CURL 发出请求:
curl -X DELETE "https://myhost/context/path/users/OXYugGKg207g5uN/07V"
其中OXYugGKg207g5uN/07V
是一个哈希,所以我想我需要在执行此请求之前进行编码。
我试过curl -X DELETE --data-urlenconded "https://myhost/context/path/users/OXYugGKg207g5uN/07V"
一些想法?
【问题讨论】:
服务器是否接收到请求?看起来您正在对整个 URL 进行 URL 编码......这将创建一个不可用的 URL。 你真的试过--data-urlenconded
吗?正确拼写可能会对您有所帮助。
【参考方案1】:
如果OXYugGKg207g5uN/07V
真的是哈希,那么您需要对其进行编码,而不是整个 url。您可以在使用 cURL 的环境中使用可用的编码函数。
【讨论】:
我正在使用 bash 脚本。你有例子吗?【参考方案2】:由于您处于 bash 环境中,因此您可以在将哈希 OXYugGKg207g5uN/07V
传递给 curl 之前对其进行编码。
直接的方法是使用它的字节表示%4f%58%59%75%67%47%4b%67%32%30%37%67%35%75%4e%2f%30%37%56
为此,请致电:
echo -ne "OXYugGKg207g5uN/07V" | xxd -plain | tr -d '\n' | sed 's/\(..\)/%\1/g'
它会给你:%4f%58%59%75%67%47%4b%67%32%30%37%67%35%75%4e%2f%30%37%56
在 bash/zsh/sh/... 中包括 curl 在内的完整单行代码如下所示:
curl -X DELETE "https://myhost/context/path/users/$(echo -ne "OXYugGKg207g5uN/07V" | xxd -plain | tr -d '\n' | sed 's/\(..\)/%\1/g')"
和等价于
curl -X DELETE "https://myhost/context/path/users/%4f%58%59%75%67%47%4b%67%32%30%37%67%35%75%4e%2f%30%37%56"
这个解决方案不是很漂亮,但很有效。 希望对您有所帮助。
【讨论】:
嗯,不知道我的理解是否正确,你得到什么样的错误?sed 's/\(..\)/%\1/g')
在 $()
评估内,因此需要转义括号。如果不转义它们,sed 将在 sh、bash 和 zsh 中抛出此错误:\1 not defined in the RE
.
评论已删除。我只使用了我需要的部分命令,错过了部分上下文。无视。以上是关于使用带有编码 URL 的 CURL 删除的主要内容,如果未能解决你的问题,请参考以下文章
带有 cURL 的 Google 地理编码 API 请求被拒绝。我有一个与启用计费的项目关联的 API 密钥
PostMan发送请求参数带有路径特殊字符会返回400错误(与URL字符及URL编码值有关)