IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

curl dans un shell qui ne s'execute pas


Sujet :

Linux

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut curl dans un shell qui ne s'execute pas
    Bonjour,

    j'essaye d’exécuter une commande CURL que je variabilise dans un script shell.

    La requête refuse de s’exécuter mais le echo que j'associe à cette requete pour debuger me donne une requete qui marche bien...

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    #!/bin/bash
     
    #FONCTION REQUETE CURL + LOG
    callCurl(){
    	CURL="curl -H \"X-CORRELATIONID: ${3}\" -H \"X-TRANSACTIONID: ${4}\"  -H \"X-USERID-TECH: ${5}\" -H \"X-USERID-TARGET: ${6}\" -H \"Content-type: application/json\"  -X \"POST\"  -d ${7} ${1}/${2}"
    	echo -e "Echo n°2"
    	echo -e $CURL 
    	$CURL
    }
     
    # PARAMETRES REQUETE
    HOST=localhost
    PORT=9300
    VERSION=trunk
    URL="http://${HOST}:${PORT}/${VERSION}"
     
    CONTENT_CHECKEMAIL="'{\"email\":\"toto@toto.com\"}'"
     
    CORRELATIONID=TOTO
    TRANSACTIONID=TATA
    USERIDTECH=TITI
    USERIDTARGET=TUTU
     
    # EXECUTION REQUETE
    echo -e "Echo n°1"
    echo -e "callCurl $URL checkEmailExists $CORRELATIONID $TRANSACTIONID $USERIDTECH $USERIDTARGET $CONTENT_CHECKEMAIL"
    callCurl $URL checkEmailExists $CORRELATIONID $TRANSACTIONID $USERIDTECH $USERIDTARGET $CONTENT_CHECKEMAIL
    Voici le retour de script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Echo n°1
    callCurl http://localhost:9300/trunk checkEmailExists TOTO TATA TITI TUTU '{"email":"toto@toto.com"}'
    Echo n°2
    curl -H "X-CORRELATIONID: TOTO" -H "X-TRANSACTIONID: TATA" -H "X-USERID-TECH: TITI" -H "X-USERID-TARGET: TUTU" -H "Content-type: application/json" -X "POST" -d '{"email":"toto@toto.com"}' http://localhost:9300/trunk/checkEmailExists
    curl: (6) Couldn't resolve host 'TOTO"'
    curl: (6) Couldn't resolve host 'TATA"'
    curl: (6) Couldn't resolve host 'TITI"'
    curl: (6) Couldn't resolve host 'TUTU"'
    curl: (6) Couldn't resolve host 'application'
    The request could not be understood by the server due to malformed syntax.
    Quand j'execute le résultat de echo n°2, ca marche super bien.

    Je suis au bout. Je paye une pinte au premier qui me donne la solution

    Manu

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    J'ai une piste :

    Le premier code suivant marche bien.
    Le seconde ne marche pas et pourtant un ECHO dessus montre que c'est le meme :

    1er code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #!/bin/bash
     
    # PARAMETRES DU SCRIPT
    HOST=localhost
    PORT=9300
    VERSION=trunk
    URL="http://$HOST:$PORT/$VERSION"
     
    CORRELATIONID=TOTO
    TRANSACTIONID=TATA
    USERIDTECH=TITI
    USERIDTARGET=TUTU
     
    EMAIL=toto@toto.com
    echo "curl -H \"X-CORRELATIONID: $CORRELATIONID" -H "X-TRANSACTIONID: $TRANSACTIONID\" -H \"X-USERID-TECH: $USERIDTECH\" -H \"X-USERID-TARGET: $USERIDTARGET\" -H \"Content-type: application/json\" -X \"POST\" -d '{\"email\": \" ${EMAIL} \" }' ${URL}/checkEmailExists"
    curl -H "X-CORRELATIONID: $CORRELATIONID" -H "X-TRANSACTIONID: $TRANSACTIONID" -H "X-USERID-TECH: $USERIDTECH" -H "X-USERID-TARGET: $USERIDTARGET" -H "Content-type: application/json" -X "POST" -d '{"email": " toto@toto.com " }' ${URL}/checkEmailExists
    second code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #!/bin/bash
     
    # PARAMETRES DU SCRIPT
    HOST=localhost
    PORT=9300
    VERSION=trunk
    URL="http://$HOST:$PORT/$VERSION"
     
    CORRELATIONID=TOTO
    TRANSACTIONID=TATA
    USERIDTECH=TITI
    USERIDTARGET=TUTU
     
    EMAIL=toto@toto.com
    echo "curl -H \"X-CORRELATIONID: $CORRELATIONID\" -H \"X-TRANSACTIONID: $TRANSACTIONID\" -H \"X-USERID-TECH: $USERIDTECH\" -H \"X-USERID-TARGET: $USERIDTARGET\" -H \"Content-type: application/json\" -X \"POST\" -d '{\"email\": \" ${EMAIL} \" }' ${URL}/checkEmailExists"
    curl -H "X-CORRELATIONID: $CORRELATIONID" -H "X-TRANSACTIONID: $TRANSACTIONID" -H "X-USERID-TECH: $USERIDTECH" -H "X-USERID-TARGET: $USERIDTARGET" -H "Content-type: application/json" -X "POST" -d '{"email": " ${EMAIL} " }' ${URL}/checkEmailExists

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 470
    Points
    19 470
    Par défaut
    Bonjour,

    il ne faut pas mettre des commandes "complexes" dans une variable pour l'exécuter plus tard, car tout est pris pour une seule entité.
    mieux vaut utiliser une fonction (sans mettre la commande dans une variable).

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    j'avance un peu mais pas des masses :

    Le code suivant marche bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/bin/bash
     
    # PARAMETRES DU SCRIPT
    HOST=localhost
    PORT=9300
    VERSION=trunk
    URL="http://$HOST:$PORT/$VERSION"
     
    CORRELATIONID=TOTO
    TRANSACTIONID=TATA
    USERIDTECH=TITI
    USERIDTARGET=TUTU
     
    EMAIL=toto@toto.com
     
    CONTENT="'{\"email\" : \"toto@toto.com\"}'"
    echo $CONTENT
     
    curl -H "X-CORRELATIONID: $CORRELATIONID" -H "X-TRANSACTIONID: $TRANSACTIONID" -H "X-USERID-TECH: $USERIDTECH" -H "X-USERID-TARGET: $USERIDTARGET" -H "Content-type: application/json" -X "POST" -d '{"email" : "toto@toto.com"}' ${URL}/checkEmailExists
    Par contre si j'essaye de variabiliser les données que j'envoie en curl, la ça ne marche plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/bin/bash
     
    # PARAMETRES DU SCRIPT
    HOST=localhost
    PORT=9300
    VERSION=trunk
    URL="http://$HOST:$PORT/$VERSION"
     
    CORRELATIONID=TOTO
    TRANSACTIONID=TATA
    USERIDTECH=TITI
    USERIDTARGET=TUTU
     
    EMAIL=toto@toto.com
     
    CONTENT="'{\"email\" : \"toto@toto.com\"}'"
    echo $CONTENT
     
    curl -H "X-CORRELATIONID: $CORRELATIONID" -H "X-TRANSACTIONID: $TRANSACTIONID" -H "X-USERID-TECH: $USERIDTECH" -H "X-USERID-TARGET: $USERIDTARGET" -H "Content-type: application/json" -X "POST" -d $CONTENT ${URL}/checkEmailExists
    Le résultat de mon echo donne bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '{"email" : "toto@toto.com"}'

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 470
    Points
    19 470
    Par défaut
    utilise des guillemets !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ CONTENT="'{\"email\" : \"toto@toto.com\"}'"
    $ set -x; echo $CONTENT; set +x
    + echo ''\''{"email"' : '"toto@toto.com"}'\'''
    '{"email" : "toto@toto.com"}'
    + set +x
    $ set -x; echo "$CONTENT"; set +x
    + echo ''\''{"email" : "toto@toto.com"}'\'''
    '{"email" : "toto@toto.com"}'
    + set +x
    sans guillemets, le découpage en mots est effectué;
    avec des guillemets, le shell considère qu'il n'y a qu'un seul mot, une seule entité

Discussions similaires

  1. Shell qui ne s'exécute pas dans mon cron
    Par sheira dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 30/12/2010, 14h16
  2. Réponses: 0
    Dernier message: 04/10/2010, 10h47
  3. [ADO] Requete qui ne s'execute pas dans une transaction
    Par Faboul dans le forum VBA Access
    Réponses: 1
    Dernier message: 17/07/2007, 13h30
  4. Code dans la fonction GUI_Opening qui ne s'execute pas
    Par AsmaHaj dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 16/05/2007, 19h31
  5. Macro qui ne s'exécute pas dans formulaire
    Par picatchou dans le forum Access
    Réponses: 10
    Dernier message: 18/09/2006, 17h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo