使用带有编码 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 删除的主要内容,如果未能解决你的问题,请参考以下文章

使用PHP CURL函数采集gzip编码网页报错

带有 cURL 的 Google 地理编码 API 请求被拒绝。我有一个与启用计费的项目关联的 API 密钥

如何分析curl抓取页面的编码

PostMan发送请求参数带有路径特殊字符会返回400错误(与URL字符及URL编码值有关)

PostMan发送请求参数带有路径特殊字符会返回400错误(与URL字符及URL编码值有关)

php curl简单采集图片生成base64编码(并附curl函数参数说明)