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

Macros et VBA Excel Discussion :

Aide à l'utilisation de WinHttpRequest


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Par défaut Aide à l'utilisation de WinHttpRequest
    Bonjour à tous et merci pour toutes les infos et discussions très enrichissantes de ce site.
    J'en viens à ma question d'ordre général à propos de WinHttpRequest que j'utilise en VBA dans Excel, notamment pour récupérer des cours de bourse, mais pas que.
    Je précise que je l'utilise différemment en php mais avec grosso modo les mêmes fonctions (curl_).
    Ma question est précisément la suivante :
    L'un des paramètres d'utilisation est la méthode qui peut prendre les valeurs "POST", "GET", "PUT".
    Selon les sites où je récupère les données, il faut utiliser soit "POST" soit "GET" sans que je ne comprenne bien la différence.
    Quelqu'un peut-il me l'expliquer ?
    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    La méthode Get envoi les paramètres de la requête dans l'url. Ils sont visibles, interceptable et la longueur du texte plus limité.

    Post envoi les paramètres encryptés après que le serveur est répondu favorablement à la proposition de dialogue (posteriori)!

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Par défaut
    Bonsoir et merci.
    Alors est-il possible de savoir a priori quelle méthode employer de GET ou POST ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Oui bien sur en appliquant les recommandation du fournisseur d'accès au serveur, ou en testent l'une ou l'autre!

    On applique en général un code qui fonctionne déjà manuellement!

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    A savoir aussi que "get" va chercher d'abords dans les temporaires si éventuellement la page aurait déjà été visitée ce qui peut être gênant sur des sites de course par exemple
    les cotes pourraient être erronées
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Par défaut
    Tester à chaque fois, c'est évident...

    Autre question sur le même sujet :
    Connaissez-vous PHP et pouvez-vous m'aider sur un point sur lequel je bute ? (mais peut-être ne sommes-nous plus dans le bon forum)
    J'ai une procédure VBA qui, en Excel me rapatrie depuis le site Yahoo Finance, l'historique des cours en bourse des actions de mon portefeuille. Elle fonctionne très bien et la voici pour avoir une idée de son fonctionnement :

    Je construis l'URL avec les variables (string) reprenant :
    - le code ticker de l'action ;
    - la date de début d'historique désiré ;
    - la date de fin d'historique désiré.
    NB : les dates sont au format TimeStamp UNIX, c'est à dire comptées en secondes à partir du 01.01.1970 à 6h00. Ainsi, le 01.06.2017 est représenté par la chaîne de caractères "1496289600"

    Pour info, demander les cours d'Air Liquide du 31.05.2017 au 02.06.2017 générera l'url suivante :
    URL = "https://query1.finance.yahoo.com/v7/finance/download/AI.PA?period1=1496203200&period2=1496376000&interval=1d&events=history&crumb=LFC/Nu7io28"

    La réponse me parvient sous forme d'un fichier CSV que je traite sans souci :

    Date,Open,High,Low,Close,Adj Close,Volume
    2017-05-31,109.300003,109.400002,108.300003,108.500000,108.500000,1151102
    2017-06-01,108.750000,109.949997,108.699997,109.849998,109.849998,700956
    2017-06-02,110.550003,111.449997,110.199997,111.099998,111.099998,719329

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    (Je limite le code à ce qui est important)
    [...]
    Dim WHR As New WinHttpRequest
    
    URL = "https://query1.finance.yahoo.com/v7/finance/download/" & TickerAction & "?period1=" & strDateDeb & "&period2=" & strDateFin & "&interval=1d&events=history&crumb=LFC/Nu7io28"
    
    WHR.Open "POST", URL, False
    WHR.Send
    Reponse = WHR.responseText
    [...]
    On voit que j'ai utilisé la méthode "POST" après avoir testé sans succès la méthode "GET".

    Pour info, quand on entre l'URL directement dans la barre d'adresse du navigateur, on obtient bien le fichier csv en téléchargement.

    J'essaie maintenant de transposer la gestion de mon portefeuille sur mon site Internet et je programme donc en PHP.
    L'idée est évidemment de refaire la même chose en utilisant la bibliothèque CURL.
    Je construits l'URL de la même façon (il n'y a pas d'erreur, c'est vérifié) et je lance la requête avec la méthode "GET" puis la méthode "POST" (à la lecture du code, vous comprendrez que nous sommes dans une classe qui fonctionne parfaitement par ailleurs ; à la base, elle n'est pas de moi, mais je l'ai modifiée).
    Dans les deux cas, je n'ai pas le résultat escompté.
    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
     
    protected function curlRequest($url,$methode='POST')
        {
            $response = [];
            $userAgent = @($this->config['userAgent'] ?: $_SERVER["HTTP_USER_AGENT"] ?: null);
            //curl request
            $ch = curl_init($url);
            if ($methode=='POST') {curl_setopt($ch, CURLOPT_POST, true);}
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
            curl_setopt($ch, CURLOPT_TIMEOUT, 15);
            curl_setopt($ch, CURLOPT_COOKIESESSION, true);
            $response['result'] = curl_exec($ch);
            $response['status'] = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            $response['error']  = curl_error($ch);
            $response['errno']  = curl_errno($ch);
            curl_close($ch);
            $this->response = $response;
        }
    Retour avec "GET" : j'ai un fichier du type json :
    { "finance": { "error": { "code": "Unauthorized", "description": "Invalid cookie" } } }

    Retour avec "POST" : une page Internet Yahoo qui s'excuse pour l'erreur et explique tout mettre en œuvre pour la corriger.

    J'en déduis un problème de paramétrage dans curl_setopt, mais lequel ? car je répète que ce code fonctionne parfaitement pour d'autres interrogations sur le même site...

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Tu utilise un site qui réclame les Cookies,et un code qui ne le réinscrit pas dans la page retransmise!

    Là s'arrête mon niveau de compétence en Php!

    http://pear.php.net/manual/en/packag...uest.intro.php

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Par défaut
    OK, merci, il va falloir que j'approfondisse ce point, d'autant qu'évidemment la réponse ne précise pas de quel cookie il s'agit (Yahoo finance en crée pratiquement une dizaine...).

    Mais alors, en VBA, comment se déroule l'interrogation au niveau des cookies ?
    Car si le site demande la lecture d'un cookie comment est-ce fait dans ce cas ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    C'est WinHttpRequest qui fait le boulot mais il existe l'équivalent en php

    En plus en php la gestion des session et des cookie n'est pas implicite!

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2014
    Messages : 41
    Par défaut
    Après pas mal de recherches sur Internet et de nombreux tests (en fait j'ai essayé tous les cookies de Yahoo et de ses sous-domaines présents sur mon PC) il s'avère qu'il faut ajouter une option d'initialisation à CURL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl_setopt($ch, CURLOPT_COOKIE, 'B=xxxxxxxxx');
    où xxxxxxxxx est le contenu du cookie copié-collé ici.
    J'ai appris que le crumb (dans mon exemple LFC/Nu7io28) n'était pas immuable non plus et pouvait changer selon les sessions.
    Mes nouvelles questions : comment récupérer le contenu du cookie en local (évidemment pas en PHP qui est sur le serveur et qui ne peut lire que les cookies du domaine qui fait l'interrogation, l'idéal serait en VBA) et le crumb qui est contenu dans l'url et donc certainement récupérable après une tentative manquée par exemple (j'ai vérifié, le crumb n'est pas donné par le retour de GetAllResponseHeaders() de WinHttpRequest en VBA ?

Discussions similaires

  1. Aide à l'utilisation de WinHttpRequest
    Par Orion34080 dans le forum VBA Access
    Réponses: 5
    Dernier message: 14/02/2011, 16h20
  2. aide pour utilisation group by
    Par rlnd23 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/10/2006, 00h54
  3. Demande d'aide pour utilisation d'un QuickReport
    Par altadeos dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2006, 07h12
  4. de l'aide pour utiliser XSLT
    Par Diallos dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 16/01/2006, 15h55
  5. Besoin d'aide pour utilisation des trie
    Par bluecurve dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2005, 08h04

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