Передача URL в квадратных скобках для скручивания

305

Если я пытаюсь передать 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?

chaimp
источник

Ответы:

482

Не берите в голову, я нашел это в документах:

-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.
chaimp
источник
10
Для меня это не сработало. Я должен был добавить \ перед каждой квадратной скобкой
jesusperaltac
@jesusperaltac То же самое для меня, с macOS
Жан
Для меня это сработало - на OS X High Sierr, curl 7.54.0 (x86_64-apple-darwin17.0) libcurl / 7.54.0.
Тень
1
@Jean @jesusperaltac для меня это работает на окнах, если командаcurl -L -o <local_file_name> -g <url>
Стивен Лян
У меня работал CentOS 7.1. Curl версия 7.29.0 (x86_64-redhat-linux-gnu) libcurl / 7.29.0)
PatS
0

Глобирование использует скобки, следовательно, необходимо избегать их с косой чертой \. В качестве альтернативы следующий параметр командной строки отключит глобализацию:

--globoff(или вариант короткого варианта: -g)

Пример:

curl --globoff https://www.google.com?test[]=1
отметка
источник