Recupero di dati tramite script
Questo argomento include un esempio di come scrivere uno script che ottiene dati tramite Servizi HTTP Di Microsoft Windows (WinHTTP) in modo sincrono o asincrono. I concetti illustrati in questo esempio forniscono la base per la scrittura di applicazioni server client o di livello intermedio che richiedono l'accesso ai dati usando il protocollo HTTP.
- Prerequisiti e requisiti
- Recupero sincrono dei dati
- Recupero dei dati in modo asincrono
- Argomenti correlati
Prerequisiti e requisiti
Oltre a una conoscenza funzionante di Microsoft JScript, questo esempio richiede quanto segue:
- Versione corrente di Microsoft Windows Software Development Kit (SDK).
- Lo strumento di configurazione proxy per stabilire le impostazioni proxy per Microsoft Windows HTTP Services (WinHTTP), se la connessione a Internet avviene tramite un server proxy. Per altre informazioni, vedere ProxyCfg.exe, uno strumento di configurazione proxy.
- Familiarità con la terminologia e i concetti di rete.
Recupero sincrono dei dati
Per creare uno script che ottiene il testo da una pagina Web in modo sincrono, eseguire le operazioni seguenti:
Aprire un editor di testo.
Copiare il codice seguente nell'editor di testo.
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"));
Salvare il file come "Retrieve.js".
Da un prompt dei comandi digitare "cscript Retrieve.js" e premere INVIO.
A questo punto è disponibile uno script che usa un oggetto WinHttpRequest per ottenere il codice sorgente HTML per la pagina Web all'indirizzo https://www.microsoft.com. Potrebbe essere necessario attendere alcuni secondi prima che venga visualizzato il codice.
L'applicazione contiene una sola funzione, "getText". La prima riga dello script crea l'oggetto WinHttpRequest .
// Create the WinHTTPRequest ActiveX Object.
var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
Quando il motore JScript rileva questa riga, crea un'istanza di questo oggetto. Se viene visualizzato il messaggio di errore "Il componente ActiveX non è in grado di creare l'oggetto", in questa riga, molto probabilmente il WinHttp.dll non è stato registrato correttamente o non è presente nel sistema.
La riga successiva dello script chiama il metodo Open .
// Create an HTTP request.
WinHttpReq.Open("GET", "https://www.microsoft.com", false);
Tre parametri specificano il verbo HTTP da usare, il nome della risorsa e se usare WinHTTP in modo sincrono o asincrono. In questo esempio, il metodo usa il verbo HTTP "GET" per ottenere dati da https://www.microsoft.com. Se si specifica FALSE per l'ultimo parametro, la transazione viene eseguita in modo sincrono. Il metodo Open non stabilisce una connessione alla risorsa perché il nome potrebbe implicare. Inizializza invece le strutture di dati interne che mantengono le informazioni sulla sessione, sulla connessione e sulla richiesta.
Il metodo Send assembla le intestazioni della richiesta e invia la richiesta. Quando viene chiamato in modalità sincrona, il metodo Send attende anche una risposta prima di consentire all'applicazione di continuare.
// Send the HTTP request.
WinHttpReq.Send();
Dopo l'invio della richiesta, lo script restituisce il valore della proprietà ResponseText dell'oggetto WinHttpRequest . Questa proprietà contiene il corpo dell'entità della risposta, in questo caso l'origine di un documento.
// Get the response text.
return WinHttpReq.ResponseText;
L'esecuzione dello script viene sospesa durante il recupero dell'intero testo della risorsa. Il testo della risorsa viene restituito dalla funzione e visualizzato.
L'oggetto WinHttpRequest garantisce che vengano rilasciate tutte le risorse interne allocate per la transazione HTTP.
Recupero dei dati in modo asincrono
Il recupero dei dati in modo asincrono tramite WinHTTP è molto simile al recupero sincrono dei dati. Modificare lo script dalla sezione precedente apportando due piccole modifiche.
Impostare il terzo parametro del metodo Open su "true" anziché su "false" per specificare che i metodi WinHTTP devono essere eseguiti in modo asincrono.
// Create a HTTP request. var temp = WinHttpReq.Open("GET", strURL, true);
Richiamare il metodo WaitForResponse prima di accedere alla proprietà ResponseText per assicurarsi che l'intera risposta sia stata ricevuta.
// Send the HTTP request. WinHttpReq.Send(); // Wait for the entire response. WinHttpReq.WaitForResponse(); // Retrieve the response text. strResult = WinHttpReq.ResponseText;
Il vantaggio principale dell'uso di WinHTTP in modo asincrono nello script è che il metodo Send restituisce immediatamente. La richiesta viene preparata e inviata da un thread di lavoro. Ciò consente all'applicazione di eseguire altre operazioni mentre è in attesa della risposta. Prima di tentare di accedere alla risposta, verificare che l'intera risposta sia stata ricevuta chiamando il metodo WaitForResponse . In caso contrario, può verificarsi un errore.
Il metodo WaitForResponse può essere usato anche per specificare un valore di timeout per la transazione. Un parametro facoltativo consente di specificare il valore di timeout in secondi.
Argomenti correlati