Partager via


Récupération de données à l’aide d’un script

Cette rubrique inclut un exemple d’écriture d’un script qui obtient des données via Microsoft Windows HTTP Services (WinHTTP) de manière synchrone ou asynchrone. Les concepts présentés dans cet exemple fournissent la base de l’écriture d’applications clientes ou serveurs de niveau intermédiaire qui nécessitent l’accès aux données à l’aide du protocole HTTP.

Conditions préalables et conditions requises

Outre une connaissance pratique de Microsoft JScript, cet exemple nécessite les éléments suivants :

Récupération de données de manière synchrone

Pour créer un script qui obtient le texte d’une page Web de manière synchrone, procédez comme suit :

  1. Ouvrez un éditeur de texte.

  2. Copiez le code suivant dans l’éditeur de texte.

    function getText(strURL)
    {
        var strResult;
    
        try
        {
            // Create the WinHTTPRequest ActiveX Object.
            var WinHttpReq = new ActiveXObject(
                                      "WinHttp.WinHttpRequest.5.1");
    
            //  Create an HTTP request.
            var temp = WinHttpReq.Open("GET", strURL, false);
    
            //  Send the HTTP request.
            WinHttpReq.Send();
    
            //  Retrieve the response text.
            strResult = WinHttpReq.ResponseText;
        }
        catch (objError)
        {
            strResult = objError + "\n"
            strResult += "WinHTTP returned error: " + 
                (objError.number & 0xFFFF).toString() + "\n\n";
            strResult += objError.description;
        }
    
        //  Return the response text.
        return strResult;
    }
    
    WScript.Echo(getText("https://www.microsoft.com/default.htm"));
    
  3. Enregistrez le fichier en tant que « Retrieve.js ».

  4. À partir d’une invite de commandes, tapez « cscript Retrieve.js », puis appuyez sur Entrée.

Vous disposez maintenant d’un script qui utilise un objet WinHttpRequest pour obtenir le code source HTML de la page Web à l’adresse https://www.microsoft.com. Vous devrez peut-être attendre plusieurs secondes avant que le code apparaisse.

L’application ne contient qu’une seule fonction, « getText ». La première ligne du script crée l’objet WinHttpRequest .

    // Create the WinHTTPRequest ActiveX Object.
    var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");

Lorsque le moteur JScript rencontre cette ligne, il crée une instance de cet objet. Si vous obtenez le message d’erreur « Le composant ActiveX ne peut pas créer d’objet », sur cette ligne, le WinHttp.dll n’a probablement pas été correctement inscrit ou n’est pas présent sur le système.

La ligne suivante du script appelle la méthode Open .

    //  Create an HTTP request.
    WinHttpReq.Open("GET", "https://www.microsoft.com", false);

Trois paramètres spécifient le verbe HTTP à utiliser, le nom de la ressource et s’il faut utiliser WinHTTP de manière synchrone ou asynchrone. Dans cet exemple, la méthode utilise le verbe HTTP « GET » pour obtenir des données à partir de https://www.microsoft.com. La spécification de FALSE pour le dernier paramètre détermine que la transaction se produit de manière synchrone. La méthode Open n’établit pas de connexion à la ressource comme son nom peut l’impliquer. Au lieu de cela, il initialise les structures de données internes qui conservent des informations sur la session, la connexion et la demande.

La méthode Send assemble les en-têtes de requête et envoie la requête. Lorsqu’elle est appelée en mode synchrone, la méthode Send attend également une réponse avant d’autoriser l’application à continuer.

    // Send the HTTP request.
    WinHttpReq.Send();

Après avoir envoyé la demande, le script retourne la valeur de la propriété ResponseText de l’objet WinHttpRequest . Cette propriété contient le corps de l’entité de la réponse, dans ce cas, la source d’un document.

    // Get the response text.
    return WinHttpReq.ResponseText;

L’exécution du script s’interrompt pendant que le texte entier de la ressource est récupéré. Le texte de la ressource est retourné à partir de la fonction et affiché.

L’objet WinHttpRequest garantit que toutes les ressources internes allouées à la transaction HTTP sont libérées.

Récupération de données de manière asynchrone

La récupération de données de façon asynchrone à l’aide de WinHTTP est très similaire à la récupération de données de manière synchrone. Modifiez le script de la section précédente en apportant deux petites modifications.

  1. Définissez le troisième paramètre de la méthode Open sur « true » au lieu de « false » pour spécifier que les méthodes WinHTTP doivent être exécutées de manière asynchrone.

       //  Create a HTTP request.
        var temp = WinHttpReq.Open("GET", strURL, true);
    
  2. Appelez la méthode WaitForResponse avant d’accéder à la propriété ResponseText pour vous assurer que la réponse entière a été reçue.

        //  Send the HTTP request.
        WinHttpReq.Send();
    
        // Wait for the entire response.
        WinHttpReq.WaitForResponse();
    
        //  Retrieve the response text.
        strResult = WinHttpReq.ResponseText;
    

L’avantage main de l’utilisation asynchrone de WinHTTP dans le script est que la méthode Send retourne immédiatement. La requête est préparée et envoyée par un thread de travail. Cela permet à votre application d’effectuer d’autres opérations pendant qu’elle attend la réponse. Avant d’essayer d’accéder à la réponse, vérifiez que la réponse entière a été reçue en appelant la méthode WaitForResponse . Sinon, une erreur peut se produire.

La méthode WaitForResponse peut également être utilisée pour spécifier une valeur de délai d’attente pour la transaction. Un paramètre facultatif vous permet de spécifier la valeur du délai d’attente en secondes.

WinHttpRequest

Http/1.1 Request for Comments (RFC 2616)