Passer une URL avec des crochets pour boucler

305

Si j'essaie de passer une URL à curl qui contient des crochets, elle échoue avec une erreur:

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

Cependant, si j'échappe aux deux crochets, cela semble fonctionner:

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

Fait intéressant, j'utilise une barre oblique inverse pour n'échapper que le premier support qu'il échoue silencieusement avec le code d'erreur 20497:

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

Ma question est de savoir comment résoudre ce problème pour les cas généraux? Existe-t-il un argument qui échappera automatiquement aux URL ou une description des caractères à échapper avant de passer à curl?

chaimp
la source

Réponses:

482

Tant pis, je l'ai trouvé dans la documentation:

-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
la source
10
Pour moi, ça n'a pas marché. J'ai dû ajouter un \ avant chaque crochet
jesusperaltac
@jesusperaltac Même chose pour moi, avec macOS
Jean
Pour moi, cela a fonctionné - sur OS X High Sierr, curl 7.54.0 (x86_64-apple-darwin17.0) libcurl / 7.54.0.
Teinte
1
@Jean @jesusperaltac pour moi ça marche sur windows si la commande estcurl -L -o <local_file_name> -g <url>
Steven Liang
A travaillé pour moi CentOS 7.1. Curl version 7.29.0 (x86_64-redhat-linux-gnu) libcurl / 7.29.0)
PatS
0

Globbing utilise des crochets, d'où la nécessité de les échapper avec une barre oblique \. Alternativement, le commutateur de ligne de commande suivant désactivera la globalisation:

--globoff(ou la version courte-options: -g)

Ex:

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