使用编码后的URL和CURL进行删除操作

56

我正在尝试使用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"

有什么建议吗?


2
服务器是否收到请求?看起来你正在对整个URL进行URL编码...这将创建一个无法使用的URL。 - shortstuffsushi
你真的尝试过 --data-urlenconded 吗?正确拼写可能会对你有所帮助。 - TRiG
2个回答

22

既然您在Bash环境中,您可以在将其传递给curl之前对哈希OXYugGKg207g5uN/07V进行编码。

一个简单的方法是使用它的字节表示%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') 位于 $() 评估内部,因此需要转义括号。如果不转义它们,则在 sh、bash 和 zsh 中 sed 将抛出此错误:\1 not defined in the RE - knugie
评论已删除。我只使用了我需要的命令的一部分,错过了一部分上下文。请忽略。 - Justin Haynes

12

如果真的 OXYugGKg207g5uN/07V 是哈希值,那么你需要对其进行编码,而不是整个 URL 进行编码。您可以使用 cURL 环境中可用的编码函数。


我正在使用Bash脚本。你有一些例子吗? - coffee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接