Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a témakör egy példa arra, hogyan írhat olyan szkriptet, amely szinkronizálva vagy aszinkron módon szerzi be az adatokat a Microsoft Windows HTTP Servicesen (WinHTTP) keresztül. Az ebben a példában bemutatott fogalmak a HTTP protokoll használatával adathozzáférést igénylő ügyfél- vagy középső szintű kiszolgálóalkalmazások írásának alapjai.
- előfeltételek és követelmények
- Adatok szinkron lekérdezése
- adatok aszinkron beolvasása
- Kapcsolódó témakörök
Előfeltételek és követelmények
A Microsoft JScript munkaalapú ismerete mellett ehhez a példához a következőkre van szükség:
- A Microsoft Windows Software Development Kit (SDK) jelenlegi verziója.
- A Microsoft Windows HTTP Services (WinHTTP) proxybeállításainak létrehozására szolgáló proxykonfigurációs eszköz, ha az internetkapcsolat proxykiszolgálón keresztül történik. További információ: ProxyCfg.exe, proxykonfigurációs eszköz.
- A hálózati terminológia és fogalmainak ismerete.
Adatok szinkronizálása
Ha olyan szkriptet szeretne létrehozni, amely szinkron módon szerzi be a szöveget egy weblapról, tegye a következőket:
Nyisson meg egy szövegszerkesztőt.
Másolja a következő kódot a szövegszerkesztőbe.
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"));Mentse a fájlt "Retrieve.js" néven.
Egy parancssorból írja be a "cscript Retrieve.js" kifejezést, és nyomja le az ENTER billentyűt.
Most már rendelkezik egy szkripttel, amely egy WinHttpRequest objektumot használ, hogy megszerezze a https://www.microsoft.comoldalon található weblap HTML-forráskódját. Előfordulhat, hogy néhány másodpercig várnia kell a kód megjelenésére.
Az alkalmazás csak egy függvényt tartalmaz: "getText". A szkript első sora létrehozza a WinHttpRequest objektumot.
// Create the WinHTTPRequest ActiveX Object.
var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
Amikor a JScript-motor találkozik ezzel a vonallal, létrehozza az objektum egy példányát. Ha a következő hibaüzenet jelenik meg: "Az ActiveX-összetevő nem tud objektumot létrehozni", ebben a sorban valószínűleg a WinHttp.dll nem volt megfelelően regisztrálva, vagy nincs jelen a rendszeren.
A szkript következő sora meghívja a Open metódust.
// Create an HTTP request.
WinHttpReq.Open("GET", "https://www.microsoft.com", false);
Három paraméter határozza meg, hogy melyik HTTP-ige, az erőforrás nevét, valamint azt, hogy a WinHTTP szinkron vagy aszinkron módon legyen-e használva. Ebben a példában az eljárás a HTTP-ige"GET" használatával kér le adatokat a https://www.microsoft.com-ból. Az utolsó paraméter FALSE megadása azt határozza meg, hogy a tranzakció szinkron módon történik-e. A Open metódus nem hoz létre kapcsolatot az erőforrással, mivel a név azt jelentheti. Ehelyett inicializálja azokat a belső adatstruktúrákat, amelyek a munkamenetről, a kapcsolatról és a kérésről tartanak fenn információkat.
A Küldés metódus összeállítja a kérelem fejléceit, és elküldi a kérést. Szinkron módban történő meghívás esetén a Küldés metódus is vár a válaszra, mielőtt engedélyezi az alkalmazás folytatását.
// Send the HTTP request.
WinHttpReq.Send();
A kérés elküldése után a szkript visszaadja a WinHttpRequest objektum ResponseText tulajdonságának értékét. Ez a tulajdonság tartalmazza a válasz entitástörzsét, ebben az esetben a dokumentum forrását.
// Get the response text.
return WinHttpReq.ResponseText;
A szkript végrehajtása szünetel az erőforrás teljes szövegének lekérése közben. A függvény visszaadja az erőforrásszöveget, amely megjelenítésre kerül.
A WinHttpRequest objektum biztosítja a HTTP-tranzakcióhoz lefoglalt belső erőforrások kiadását.
Adatok aszinkron beolvasása
Az adatok aszinkron beolvasása a WinHTTP használatával nagyon hasonló az adatok szinkron beolvasásához. Módosítsa a szkriptet az előző szakaszból két kisebb módosítással.
Állítsa a Open metódus harmadik paraméterét "true" (igaz) értékre a "false" helyett, hogy a WinHTTP metódusokat aszinkron módon kell végrehajtani.
// Create a HTTP request. var temp = WinHttpReq.Open("GET", strURL, true);A ResponseText tulajdonság elérése előtt hívja meg a WaitForResponse metódust a teljes válasz fogadásának biztosítása érdekében.
// Send the HTTP request. WinHttpReq.Send(); // Wait for the entire response. WinHttpReq.WaitForResponse(); // Retrieve the response text. strResult = WinHttpReq.ResponseText;
A WinHTTP aszinkron szkriptben való használatának fő előnye, hogy a Send metódus azonnal visszatér. A kérést egy munkaszál készíti elő és küldi el. Így az alkalmazás más műveleteket is elvégezhet, amíg a válaszra vár. Mielőtt megpróbálna hozzáférni a válaszhoz, győződjön meg arról, hogy a teljes válasz megérkezett a WaitForResponse metódus meghívásával. Ellenkező esetben hiba léphet fel.
A WaitForResponse metódussal időtúllépési értéket is megadhat a tranzakcióhoz. Az opcionális paraméter lehetővé teszi az időtúllépési érték másodpercben történő megadását.
Kapcsolódó témakörök