Partilhar via


Recuperando dados usando script

Este tópico inclui um exemplo de como escrever um script que obtém dados por meio do Microsoft Windows HTTP Services (WinHTTP) de forma síncrona ou assíncrona. Os conceitos demonstrados neste exemplo fornecem a base para escrever aplicativos cliente ou servidor de camada intermediária que exigem acesso a dados usando o protocolo HTTP.

Pré-requisitos e requisitos

Além de um conhecimento prático do Microsoft JScript, este exemplo requer o seguinte:

  • A versão atual do Microsoft Windows Software Development Kit (SDK).
  • A ferramenta de configuração de proxy para estabelecer as configurações de proxy para o Microsoft Windows HTTP Services (WinHTTP), se sua conexão com a Internet for através de um servidor proxy. Para obter mais informações, consulte ProxyCfg.exe, uma ferramenta de configuração de proxy.
  • Familiaridade com terminologia de rede e conceitos.

Recuperando dados de forma síncrona

Para criar um script que obtém o texto de uma página da Web de forma síncrona, faça o seguinte:

  1. Abra um editor de texto.

  2. Copie o código a seguir para o editor de texto.

    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. Salve o arquivo como "Retrieve.js".

  4. Em um prompt de comando, digite "cscript Retrieve.js" e pressione ENTER.

Agora você tem um script que usa um objeto WinHttpRequest para obter o código-fonte HTML para a página da Web em https://www.microsoft.com. Talvez seja necessário aguardar alguns segundos para que o código apareça.

O aplicativo contém apenas uma função, "getText". A primeira linha do script cria o WinHttpRequest objeto.

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

Quando o mecanismo JScript encontra essa linha, ele cria uma instância desse objeto. Se receber a mensagem de erro "ActiveX component can't create object" nesta linha de código, provavelmente o WinHttp.dll não foi registado corretamente ou não está presente no sistema.

A próxima linha do script chama o método Open.

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

Três parâmetros especificam qual verbo HTTP usar, o nome do recurso e se deve usar WinHTTP de forma síncrona ou assíncrona. Neste exemplo, o método está usando o verbo HTTP "GET" para obter dados de https://www.microsoft.com. Especificar FALSE para o último parâmetro determina que a transação ocorre de forma síncrona. O método Open não estabelece uma conexão com o recurso como o nome pode sugerir. Em vez disso, ele inicializa as estruturas de dados internas que mantêm informações sobre a sessão, conexão e solicitação.

O método Send monta os cabeçalhos de solicitação e envia a solicitação. Quando chamado no modo síncrono, o método Send também aguarda uma resposta antes de permitir que o aplicativo continue.

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

Depois de enviar a solicitação, o script retorna o valor da propriedade ResponseText do objeto WinHttpRequest. Esta propriedade contém o conteúdo da resposta, neste caso, a fonte de um documento.

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

A execução do script pausa enquanto todo o texto do recurso é recuperado. O texto do recurso é retornado da função e exibido.

O objeto WinHttpRequest garante que todos os recursos internos alocados para a transação HTTP sejam liberados.

Recuperando dados de forma assíncrona

Recuperar dados de forma assíncrona usando WinHTTP é muito semelhante a recuperar dados de forma síncrona. Modifique o script da seção anterior fazendo duas pequenas alterações.

  1. Defina o terceiro parâmetro do método Open como "true" em vez de "false" para especificar que os métodos WinHTTP devem ser executados de forma assíncrona.

       //  Create a HTTP request.
        var temp = WinHttpReq.Open("GET", strURL, true);
    
  2. Invoque o método WaitForResponse antes de acessar a propriedade ResponseText para garantir que toda a resposta tenha sido recebida.

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

A principal vantagem de usar WinHTTP de forma assíncrona no script é que o método Send retorna imediatamente. A solicitação é preparada e enviada por um thread de trabalho. Isso permite que seu aplicativo faça outras coisas enquanto aguarda a resposta. Antes de tentar acessar a resposta, verifique se a resposta inteira foi recebida chamando o método WaitForResponse. Caso contrário, pode ocorrer um erro.

O método WaitForResponse também pode ser usado para especificar um valor de tempo limite para a transação. Um parâmetro opcional permite especificar o valor de tempo limite em segundos.

WinHttpRequest

Solicitação de comentários HTTP/1.1 (RFC 2616)