Передача 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?

Ответы:


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.

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.