Adatok lekérése szkripttel

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

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:

  1. Nyisson meg egy szövegszerkesztőt.

  2. 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"));
    
  3. Mentse a fájlt "Retrieve.js" néven.

  4. 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.

  1. Á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);
    
  2. 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.

WinHttpRequest

HTTP/1.1 Megjegyzések kérése (RFC 2616)