스크립트를 사용하여 데이터 검색

이 항목에는 동기 또는 비동기적으로 WinHTTP(Microsoft Windows HTTP 서비스)를 통해 데이터를 가져오는 스크립트를 작성하는 방법의 예가 포함되어 있습니다. 이 예제에 설명된 개념은 HTTP 프로토콜을 사용하여 데이터에 액세스해야 하는 클라이언트 또는 중간 계층 서버 애플리케이션을 작성하기 위한 기초를 제공합니다.

필수 구성 요소 및 요구 사항

이 예제에서는 Microsoft JScript에 대한 실무 지식 외에도 다음이 필요합니다.

  • Microsoft SDK(소프트웨어 개발 키트)의 현재 버전입니다.
  • 인터넷에 대한 연결이 프록시 서버를 통해 있는 경우 WinHTTP(Microsoft Windows HTTP 서비스)에 대한 프록시 설정을 설정하는 프록시 구성 도구입니다. 자세한 내용은 프록시 구성 도구인ProxyCfg.exe 참조하세요.
  • 네트워크 용어 및 개념에 대해 잘 알고 있습니다.

동기적으로 데이터 검색

웹 페이지에서 텍스트를 동기적으로 가져오는 스크립트를 만들려면 다음을 수행합니다.

  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 개체를 사용하여 의 웹 페이지에 대한 HTML 소스 코드를 가져오는 스크립트가 있습니다 https://www.microsoft.com. 코드가 표시될 때까지 몇 초 정도 기다려야 할 수 있습니다.

애플리케이션에는 "getText" 함수가 하나만 포함됩니다. 스크립트의 첫 번째 줄은 WinHttpRequest 개체를 만듭니다.

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

JScript 엔진이 이 줄을 발견하면 이 개체의 instance 만듭니다. 이 줄에서 "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. WinHTTP 메서드를 비동기적으로 수행하도록 지정하려면 Open 메서드의 세 번째 매개 변수를 "false" 대신 "true"로 설정합니다.

       //  Create a HTTP request.
        var temp = WinHttpReq.Open("GET", strURL, true);
    
  2. ResponseText 속성에 액세스하기 전에 WaitForResponse 메서드를 호출하여 전체 응답이 수신되었는지 확인합니다.

        //  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)