如果我尝试将包含括号的 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 之前需要转义的字符的描述?
没关系,我在文档中找到了它:
-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.
Globbing 使用括号,因此需要用斜杠 \
转义它们。或者,以下命令行开关将禁用通配:
--globoff
(或空头期权版本:-g
)
前任:
curl --globoff https://www.google.com?test[]=1
以上答案都不适合我,我必须用 %5B
和 %5D
替换所有开/关括号。
[ ---> %5B
和
] ---> %5D
我最初的 curl url 是这样的
https://test.com/computer/agent1/api/json?pretty=true&tree=executors[currentExecutable[url]]
现在我这样使用
https://test.com/computer/agent1/api/json?pretty=true&tree=executors%5BcurrentExecutable%5Burl%5D%5D
尽管我的 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 以您将 grep 设置为的任何颜色突出显示:
curl: (3) bad range in URL position 31:
http://1.2.3.4/api/v1/lalalasome_stringlalala
在终端中查看时,终端透明地将 [color\codes]some_string[colour\codes] 转换为预期的无特殊字符 URL,但在幕后,颜色代码在传递给 curl 的 URL 中发送,导致URL 中的括号。
解决方案是不使用匹配突出显示。
curl -L -o <local_file_name> -g <url>
,它可以在 Windows 上运行