传递带括号的URL以进行卷曲

时间:2011-11-30 22:31:41

标签: url curl

如果我尝试将URL传递给包含括号的curl,则会失败并显示错误:

$ curl 'http://www.google.com/?TEST[]=1'
curl: (3) [globbing] illegal character in range specification at pos 29

但是,如果我从两个括号中删除它,它似乎可以工作:

$ curl 'http://www.google.com/?TEST\[\]=1'

有趣的是,我使用反斜杠来逃避它无声地失败的第一个括号,错误代码为20497:

$ curl 'http://www.google.com/?TEST\[]=1'
$ echo $!
20497

我的问题是如何解决一般情况?是否存在会自动转义URL的参数,或者在传递给curl之前需要转义的字符的描述?

3 个答案:

答案 0 :(得分:424)

没关系,我在文档中找到了它:

-g/--globoff
              This  option  switches  off  the "URL globbing parser". When you set this option, you can
              specify URLs that contain the letters {}[] without having them being interpreted by  curl
              itself.  Note  that  these  letters  are not normal legal URL contents but they should be
              encoded according to the URI standard.

答案 1 :(得分:4)

Globbing使用方括号,因此需要使用斜杠\对其进行转义。或者,以下命令行开关将禁用通配符:

--globoff(或简称为-g

例如:

curl --globoff https://www.google.com?test[]=1

答案 2 :(得分:0)

虽然我的 URL 中没有(明显的)括号,但我收到了这个错误,在我的情况下 --globoff 命令无法解决问题。

例如(在 iTerm2 中的 mac 上执行此操作):

for endpoint in $(grep some_string output.txt); do curl "http://1.2.3.4/api/v1/${endpoint}" ; done

我已将 grep 别名为“grep --color=always”。结果,上面的命令会导致这个错误, some_string 以你设置的任何颜色突出显示:

curl: (3) bad range in URL position 31:
http://1.2.3.4/api/v1/lalalasome_stringlalala

在终端中查看时,终端透明地将 [colour\codes]some_string[colour\codes] 转换为预期的无特殊字符 URL,但在幕后,颜色代码在传递给 curl 的 URL 中发送,导致您的网址中包含括号。

解决方案是不使用匹配突出显示。