Récupération de données à l’aide d’un script
cette rubrique fournit un exemple d’écriture d’un script qui obtient des données via Microsoft Windows HTTP Services (WinHTTP) de façon synchrone ou asynchrone. Les concepts présentés dans cet exemple fournissent la base de l’écriture d’applications clientes ou de serveur de couche intermédiaire qui requièrent l’accès aux données à l’aide du protocole HTTP.
- Conditions préalables et configuration requise
- Récupération de données de façon synchrone
- Récupération de données de façon asynchrone
- Rubriques connexes
Conditions préalables et configuration requise
outre les connaissances pratiques de Microsoft JScript, cet exemple nécessite les éléments suivants :
- version actuelle du kit de développement logiciel (SDK) Microsoft Windows.
- l’outil de configuration de proxy pour établir les paramètres de proxy pour les Services HTTP Microsoft Windows (WinHTTP), si votre connexion à Internet s’effectue via un serveur proxy. Pour plus d’informations, consultez ProxyCfg.exe, un outil de configuration de proxy.
- Une bonne connaissance de la terminologie et des concepts relatifs au réseau .
Récupération de données de façon synchrone
Pour créer un script qui obtient le texte d’une page Web de façon synchrone, procédez comme suit :
Ouvrez un éditeur de texte.
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"));Enregistrez le fichier en tant que « Retrieve.js ».
À partir d’une invite de commandes, tapez « cscript Retrieve.js » et appuyez sur entrée.
Vous avez maintenant 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 quelques secondes avant que le code n’apparaisse.
L’application contient 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 de JScript rencontre cette ligne, il crée une instance de cet objet. si vous recevez le message d’erreur « ActiveX composant 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 façon synchrone ou asynchrone. Dans cet exemple, la méthode utilise le verbe http« obtenir » pour obtenir des données à partir de https://www.microsoft.com . La spécification de la valeur false pour le dernier paramètre détermine que la transaction se produit de façon synchrone. La méthode Open n’établit pas de connexion à la ressource, car le nom peut le supposer. Au lieu de cela, il initialise les structures de données internes qui maintiennent les informations sur la session, la connexion et la demande.
La méthode Send assemble les en-têtes de requête et envoie la demande. En cas d’appel 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 l’envoi de la demande, le script retourne la valeur de la propriété responseText de l’objet WinHttpRequest . Cette propriété contient le corps d’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 l’intégralité du texte de la ressource est récupérée. Le texte de la ressource est retourné à partir de la fonction et affiché.
L’objet WinHttpRequest garantit que toutes les ressources internes qui sont allouées pour la transaction http sont libérées.
Récupération de données de façon 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 façon synchrone. Modifiez le script de la section précédente en effectuant deux petites modifications.
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 façon asynchrone.
// Create a HTTP request. var temp = WinHttpReq.Open("GET", strURL, true);Appelez la méthode WaitForResponse avant d’accéder à la propriété responseText pour vous assurer que l’intégralité de la réponse a été reçue.
// Send the HTTP request. WinHttpReq.Send(); // Wait for the entire response. WinHttpReq.WaitForResponse(); // Retrieve the response text. strResult = WinHttpReq.ResponseText;
Le principal avantage de l’utilisation de WinHTTP de manière asynchrone dans le script est que la méthode Send est retournée 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 tâches pendant qu’elle attend la réponse. Avant de tenter d’accéder à la réponse, assurez-vous que l’intégralité de la réponse 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.