Compartilhar via


Recuperando dados usando script

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

Pré-requisitos e requisitos

Além de um conhecimento funcional 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 Os Serviços HTTP do Microsoft Windows (WinHTTP), se sua conexão com a Internet for por meio de um servidor proxy. Para obter mais informações, consulte ProxyCfg.exe, uma Ferramenta de Configuração de Proxy.
  • Uma familiaridade com a terminologia e os conceitos de rede.

Recuperando dados de forma síncrona

Para criar um script que obtenha 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 no 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 vários segundos para que o código apareça.

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

    // 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 você receber a mensagem de erro "O componente ActiveX não pode criar objeto", nessa linha, provavelmente o WinHttp.dll não foi registrado 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 deseja 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, pois o nome pode implicar. Em vez disso, inicializa as estruturas de dados internas que mantêm informações sobre a sessão, a conexão e a 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 . Essa propriedade contém o corpo da entidade da resposta, nesse caso, a origem 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

A recuperação de dados de forma assíncrona usando WinHTTP é muito semelhante à recuperação de 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;
    

O main 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 toda a resposta foi recebida chamando o método WaitForResponse . Caso contrário, um erro poderá ocorrer.

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 que você especifique o valor de tempo limite em segundos.

WinHttpRequest

Solicitação HTTP/1.1 para Comentários (RFC 2616)