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

VBScript Discussion :

requête HTTP (méthode POST) pour récupérer XML


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2011
    Messages : 14
    Points : 18
    Points
    18
    Par défaut requête HTTP (méthode POST) pour récupérer XML
    Salut,

    Je souhaite via une requête HTTP (méthode POST), récupérer sous format XML un ensemble de données depuis un site. Le site en question m'a confirmé que je pouvais utiliser du VBScript pour recevoir les données et ma donné comme exemple le code suivant (qui forcément n'est pas en VBS, mais en PHP).

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
     <?php
    //permet d'afficher le document en XML
      header('Content-type: text/xml; charset=UTF-8');
     
     //remplacer VOTRE_TOKEN par votre token
     define('TOKEN', 'VOTRE_TOKEN');
     
     //call à appeler, ici GetOrders
     define('CALL', 'GetOrders');
     
     //Indifférement Sandbox ou Production
     define('MODE', 'Sandbox');
     
     //Pas besoin de xml pour GetOrder
     $xml = '';
     
     echo callWS($xml);
     
     function callWS($xml){
     
         //url du web service
         $service_url = 'https://.../webservice/';
     
         //encapsule les données dans un tableau
         $curl_post_data = array(
             'TOKEN' => TOKEN, 
             'CALL' => CALL, 
             'MODE'=> MODE,
             'REQUEST' => $xml
             );
     
         $curl = curl_init();
         curl_setopt($curl, CURLOPT_URL, $service_url);
         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
         curl_setopt($curl, CURLOPT_HEADER, false);
         curl_setopt($curl, CURLOPT_POST, true);
         curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
         $curl_response = curl_exec($curl);
         curl_close($curl);
     
         //XML à parser
         return $curl_response;
     }
     
     ?>
    j'ai fais ce code VBS

    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
     
    Option Explicit
     
    'Déclaration des variables
    Dim oXMLHTTP
    Dim StrTOKEN, StrCALL, StrMODE, StrREQUEST, strEnvelope, StrURL
     
    'Initialisation des données pour la requête
    StrURL = "https://.../webservice/"
    StrTOKEN = "abcdef0123456789abcdef123456789abcdef123" 'fictif pour l'exemple
    StrCALL = "GetOrders"
    StrMODE = "Sandbox"
    StrREQUEST = ""
    strEnvelope = "Token=" & StrTOKEN & "&Call=" & StrCALL   & "&Mode=" & StrMODE & "&Request=" & StrREQUEST
     
    'Objet XMLHTTP
    Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.3.0")
    With oXMLHTTP
    	.open "POST", StrURL , False
    	.setRequestHeader "Content-type: text/xml; charset=UTF-8","application/x-www-form-urlencoded"
    	.send strEnvelope
    	wScript.Echo .responseText
    	.abort
    End with
    mais la réponse du serveur est le suivant

    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
     
    <Result>
    <Request>
    <Date>2012-08-08T17:20:00+02:00</Date>
    <Call/>
    <Token/>
    <Mode/>
    </Request>
    <Response>
    <Error>
    <Type>Parametres</Type>
    <Message>Token manquant</Message>
    </Error>
    </Response>
    </Result>
    Si quelqu'un aurait une idée sur où je bug ?
    merci par avance

  2. #2
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 184
    Points
    17 184
    Par défaut
    Salut

    J'ai un gros doute sur la ligne 14, les &
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'strEnvelope = "Token=" & StrTOKEN & "&Call=" & StrCALL & "&Mode=" & StrMODE & "&Request=" & StrREQUEST
     strEnvelope = "Token=" & StrTOKEN & " Call=" & StrCALL & " Mode=" & StrMODE & " Request=" & StrREQUEST
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    La ligne #14 devrait marcher comme telle sauf si les données contiennent les caractères qui doivent être mis en forme d'encodage-url; des données comme montrées sont épargnées d'encodage supplémentaire. Le problème c'est la ligne #20, plus spécifiquement, le premier paramètre doit être Content-type, tout court: c'est le nom de la clé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	'.setRequestHeader "Content-type: text/xml; charset=UTF-8","application/x-www-form-urlencoded"    'incorrect
    	.setRequestHeader "Content-type","charset=UTF-8; application/x-www-form-urlencoded"

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2011
    Messages : 14
    Points : 18
    Points
    18
    Par défaut
    Merci à tous pour votre aide.
    Malheureusement je n'ai pu aboutir à mon programme.
    Impossible de comprendre le pourquoi du comment.

  5. #5
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Tout d'abord, il faut y avoir la volontée d'études et de faire comprendre... sans ça, on n'y peut rien vous aider ou aider soi-même.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2011
    Messages : 14
    Points : 18
    Points
    18
    Par défaut
    Tout d'abord merci de l’intérêt pour mon post.

    Effectivement je baisse les bras sur cette problématique à défaut d'aboutir.

    Il s'agit pourtant d'un simple appel POST via un xmlhttp, mais la gestion du TOKEN reste un mystère, même pour les développeurs du site en question.

    J'ai bien tenté votre suggestion, mais avec toujours la même réponse du serveur: TOKEN manquant !

    Si vous avez d'autres idées, je suis preneur et à votre écoute.

  7. #7
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    J'ai regardé la version originale en php et tiré conclusion que la page qui expose la service devrait attender une requête de mime multipart/form-data. Ca explique pourquoi elle ne trouve pas les données postées.

    Voici ce que je ferais pour tester: c'est un cas où on poste une requête de ce genre sans toutfois les données binaires. Pour les cas où elles contienent les données intransèquement binaires, c'est un peu plus compliqué que ça.
    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
    30
    31
    32
    33
    StrURL = "https://.../webservice/"
    StrTOKEN = "abcdef0123456789abcdef123456789abcdef123" 'fictif pour l'exemple
    StrCALL = "GetOrders"
    StrMODE = "Sandbox"
    StrREQUEST = ""
     
    set odic=createobject("scripting.dictionary")
    odic.add "TOKEN", StrTOKEN
    odic.add "CALL", StrCALL
    odic.add "MODE", StrMODE
    odic.add "REQUEST", StrREQUEST
     
    'assez arbitraire, d'ailleurs
    boundary="----------------------------3a72933b6b94"
     
    startpart="--" & boundary & vbcrlf
    sformdata=""
    for each entry in odic
        sformdata=sformdata & startpart
        sformdata=sformdata & "Content-Disposition: form-data;" & " "
        sformdata=sformdata & "name=""" & entry & """" & vbcrlf & vbcrlf
        sformdata=sformdata & odic(entry) & vbcrlf
    next
     
    sendform="--" & boundary & "--" & vbcrlf
     
    set oxmlhttp=createobject("msxml2.xmlhttp.3.0")
    with oxmlhttp
        .open "POST", StrURL, false
        .setRequestHeader "Content-type", "multipart/form-data; boundary=" & boundary & ";"
        .send sformdata & sendform
        wScript.Echo .responseText
    end with
    Voilà ce que vous pouvez faire pour tester la fonctionalité fondamentale.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème sur une requête Http méthode POST
    Par anto2b dans le forum Android
    Réponses: 0
    Dernier message: 13/02/2013, 11h53
  2. Serveur http méthode POST
    Par gelam dans le forum C++
    Réponses: 0
    Dernier message: 10/10/2007, 17h03
  3. telnet, protocole HTTP méthode POST
    Par lapras123 dans le forum Internet
    Réponses: 3
    Dernier message: 22/08/2007, 21h31
  4. [Sécurité] interception d'une requête HTTP en POST
    Par olive_le_malin dans le forum Langage
    Réponses: 3
    Dernier message: 11/07/2007, 18h00
  5. Envoyer une requête http et recevoir la réponse XML
    Par jlscvdb dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 26/02/2007, 17h38

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