Pages : 1
#1 Le 02/03/2016, à 16:42
- Chris88
cURL avec une variable comme URL
Bonjour tout le monde.
J'utilise cURL dans mes scripts et ça fonctionne bien, cependant, de temps en temps, j'obtiens l'erreur suivante :
curl: no URL specified!
curl: try 'curl --help' or 'curl --manual' for more information
Je pense avoir compris le problème, mais j'ai besoin de vous pour la solution. Voici un cas ok et un non ok
Cas qui fonctionne :
joueur_url[1]="https://www.googleplay.es/stats/?u=tototiti@yahoo.net"
page_html=$(curl --silent ${joueur_url[1]})
Cas qui fonctionne pas : (La différence étant les crochet dans l'URL
joueur_url[1]="https://www.googleplay.es/stats/?u=toto[titi]@yahoo.net"
page_html=$(curl --silent ${joueur_url[1]})
Il n'y pas que le crochet, mais un ensemble de caractère (tel que le . aussi) qui plante ma commande cURL
Hors ligne
#2 Le 02/03/2016, à 19:26
- claudius01
Re : cURL avec une variable comme URL
Bonsoir,
...
Il n'y pas que le crochet, mais un ensemble de caractère (tel que le . aussi) qui plante ma commande cURL
Si cURL ne retourne pas d'erreur du genre "curl: (3) Illegal characters found in URL curl: (3) Illegal characters found in URL Washington", c'est qu'il achemine cette URL (en espérant qu'il n'y ait pas des substitutions "cachées" car il semblerait que les '[' et ']' soient interprétés (cf. curl.1 the man page -> URL)
Proposition: As-tu essayer d'attaquer le serveur avec l'url telle quelle avec l'ensemble des caractères qui "plantent" ?
C'est peut-être le serveur qui n'est pas content !
Hors ligne
#3 Le 02/03/2016, à 19:58
- Watael
Re : cURL avec une variable comme URL
salut,
utilise systématiquement des guillemets autour de tes variables, pour protéger certains caractères spéciaux.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 02/03/2016, à 20:40
- claudius01
Re : cURL avec une variable comme URL
Oh là...
J'ai tenté l'URL:"https://www.googleplay.es/stats/?u=toto[titi]@yahoo.net" et...
Il va de soit que je n'irai pas plus loin ?:..
Hors ligne
#5 Le 02/03/2016, à 23:10
- Chris88
Re : cURL avec une variable comme URL
Merci de votre aide, j'ai protégé la variable par des " sans succés.
Oui l'URL avec les crochet fonctionne très bien dans un navigateur.
J'ai simplifié le soucis afin que vous puissiez le constater :
Cas qui fonctionne :
joueur_url="https://forum.ubuntu-fr.org/?u=test22decrochet"
page_html=$(curl --silent "$joueur_url")
echo $page_html
Cas qui fonctionne pas :
joueur_url="https://forum.ubuntu-fr.org/?u=test[22]decrochet"
page_html=$(curl --silent "$joueur_url")
echo $page_html
Chris
Hors ligne
#6 Le 02/03/2016, à 23:14
- Chris88
Re : cURL avec une variable comme URL
J'ai trouvé, en retirant --silent, le message clair arrive :
curl: (3) [globbing] error: bad range specification after pos
J'ai trouvé qu'en ajoutant le paramètre --globoff, ça résoud le soucis.
Merci de votre aide
Hors ligne
#7 Le 03/03/2016, à 05:26
- MicP
Re : cURL avec une variable comme URL
Je ne sais pas si ça conviendra à ce que tu veux faire, mais…
Si le problème vient de certains caractères du lien qui sont "mal" interprétés par curl
un encodage pourrait (peut-être) résoudre le problème.
( "Pompé" honteusement depuis ce lien )
Contenu du script bash que j'ai nommé monUrlencode :
#!/bin/bash
[ "$#" -eq "0" ] && exit 1
old_lc_collate=$LC_COLLATE
LC_COLLATE=C
length="${#1}"
for (( i = 0; i < length; i++ )); do
c="${1:i:1}"
case $c in
[a-zA-Z0-9.~_-]) printf "$c" ;;
*) printf "$c" | xxd -p -c1 | while read x;do printf "%%%s" "$x";done
esac
done
LC_COLLATE=$old_lc_collate
=======
Utilisation de ce script en ligne de commande :
michel@debg53sw:~/mesScripts$ monUrl="https://www.googleplay.es/stats/?u=toto[titi]@yahoo.net"
michel@debg53sw:~/mesScripts$ echo $(urlencode $monUrl)
https%3a%2f%2fwww.googleplay.es%2fstats%2f%3fu%3dtoto%5btiti%5d%40yahoo.net
michel@debg53sw:~/mesScripts$
Dans un script, il n'est pas nécessaire de passer par une variable :
#… Début du script
page_html=$(curl --silent $(urlencode https://forum.ubuntu-fr.org/?u=test[22]decrochet))
#… Suite du script
Dernière modification par MicP (Le 03/03/2016, à 06:23)
Hors ligne