Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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,

Chris88 a écrit :

...
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

#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