共用方式為


使用腳本擷取數據

本主題包含一個範例,說明如何撰寫腳本,以透過 Microsoft Windows HTTP Services (WinHTTP) 同步或非同步地取得資料。 此範例中示範的概念提供撰寫需要使用 HTTP 通訊協定存取數據的用戶端或仲介層伺服器應用程式的基礎。

必要條件和需求

除了Microsoft JScript 的工作知識之外,此範例還需要下列各項:

  • Microsoft Windows 軟體開發工具包 (SDK) 的目前版本。
  • 如果您的因特網連線是透過 Proxy 伺服器,則 Proxy 組態工具可建立 Microsoft Windows HTTP 服務 (WinHTTP) 的 Proxy 設定。 如需詳細資訊,請參閱 ProxyCfg.exe、Proxy 組態工具
  • 熟悉 網路術語 和概念。

同步擷取數據

若要建立以同步方式從網頁取得文字的腳本,請執行下列動作:

  1. 開啟文字編輯器。

  2. 將下列程式代碼複製到文字編輯器中。

    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. 將檔案儲存為 「Retrieve.js」。

  4. 在命令提示字元中,輸入 「cscript Retrieve.js」,然後按 ENTER。

您現在有一個腳本,使用 WinHttpRequest 物件來取得位於 https://www.microsoft.com的網頁之 HTML 原始程式碼。 您可能必須等候數秒,程式代碼才能出現。

應用程式只包含一個函式 「getText」。 腳本的第一行會建立 WinHttpRequest 物件。

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

當 JScript 引擎遇到這一行時,它會建立這個對象的實例。 如果您收到錯誤訊息「ActiveX 元件無法建立物件」,在此行上,很可能是 WinHttp.dll 未正確註冊或不存在於系統上。

腳本的下一行會呼叫 Open 方法。

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

三個參數會指定要使用哪個 HTTP 動詞、資源名稱,以及 WinHTTP 是否以同步或非同步的方式使用。 在此範例中,方法使用 HTTP 動詞“GET” 從 https://www.microsoft.com取得數據。 為最後一個參數指定 FALSE 會判斷交易會同步發生。 Open 方法不會如名稱所暗示般建立與資源的連線。 相反地,它會初始化內部數據結構,以維護會話、連線和要求的相關信息。

Send 方法會組合要求標頭並傳送要求。 以同步模式呼叫時,Send 方法也會等候回應,再允許應用程式繼續。

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

傳送要求之後,腳本會傳回 WinHttpRequest 物件的 ResponseText 屬性值。 此屬性包含響應的實體內容,在此情況下,即為文件的來源。

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

擷取資源的整個文字時,腳本的執行會暫停。 資源文字會從函式傳回並顯示。

WinHttpRequest 對象可確保釋放為 HTTP 交易配置的任何內部資源。

以異步方式擷取數據

使用 WinHTTP 以異步方式擷取數據與同步擷取數據非常類似。 進行兩個小變更,以修改上一節中的腳本。

  1. Open 方法的第三個參數設定為 “true”,而不是將 “false” 設定為 ,以指定應該以異步方式執行 WinHTTP 方法。

       //  Create a HTTP request.
        var temp = WinHttpReq.Open("GET", strURL, true);
    
  2. 先叫用 WaitForResponse 方法,再存取 ResponseText 屬性,以確保已收到整個回應。

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

在腳本中以異步方式使用 WinHTTP 的主要優點是,Send 方法會立即傳回。 要求是由工作線程準備和傳送。 這可讓應用程式在等候回應時執行其他動作。 嘗試存取回應之前,請先呼叫 waitForResponse 方法,以確保已收到整個回應。 否則會發生錯誤。

WaitForResponse 方法也可以用來指定交易的逾時值。 選擇性參數可讓您以秒為單位指定逾時值。

WinHttpRequest

HTTP/1.1 批注要求 (RFC 2616)