─━ IT ━─

Microsoft의 XMLHTTP 객체를 사용하여 다른 웹 페이지의 데이터를 가져오다

DKel 2021. 8. 16. 00:45
반응형
처음에 다른 Web 사이트의 데이터를 HTTP 리퀘스트 경유로 취득할 수 있는 상용 COM 컴퍼넌트로서는, AspTear 나 AspHTTP 가 유명하다.그러나, 별로 알려져 있지 않지만, Microsoft도 같은 컴포넌트를 제공하고 있다.Microsoft의 XML DOM(Document Object Model) 컴포넌트 스위트에는 XMLHTTP 오브젝트가 포함되어 있다.XML HTTP는, 원래 리모트 서버상의 XML 문서에의 클라이언트 사이드 액세스를 HTTP 프로토콜로 실현하기 위해서 개발된 오브젝트다.이 객체는 요청(POSTS도 포함)을 송신하고, 결과 XML, HTML 또는 이진 데이터를 취득하기 위한 간단한 API를 공개하고 있다.(주:본고의 집필 시점에서는 Microsoft 의 MSXML 3.0 이 발매된 직후이다.이것에는, Web 서버나 애플리케이션 서버로 사용하기 위한 서버 사이드용 XMLHTTP 컴포넌트가 포함되어 있다.MSXML 3.0을 다운로드하지 않는 한은 전의 버전을 사용하게 되지만, 대부분의 애플리케이션에서 문제는 발생하지 않을 것이다) 또, Internet Explorer 의 최신판을 인스톨 하고 있는 경우는, 아마 몇개의 버전의 MSXML 가 인스톨 되어 있을 것이다.MSXML 를 별도 인스톨 하는 경우는, 최신 버전의 MDAC 나, MSXML 컴포넌트 그 자체를 인스톨 할 수 있다.MSXML 가 인스톨 되어 있지 않은 경우는, Server.CreateObject(′Microsoft.XML HTTP′)를 실행했을 때에 Invalid ProgID 에러가 발생한다.XML HTTP 의 기본 XML HTTP 의 가장 기본적인 기능은, Web 페이지 전체의 텍스트를 반환하는 것이다.다음에 예를 제시한다.<%
Response . Buffer = True
Dim objXMLHTTP , xml

′ Create an xmlhttp object :
Set xml = Server . CreateObject ( ′ Microsoft . XMLHTTP ′ )
′ Or , for version 3 . 0 of XMLHTTP , use :
′ Set xml = Server . CreateObject ( ′ MSXML 2 . ServerXMLHTTP ′ )

′ Opens the connection to the remote server .
xml . Open ′ GET ′ , ′ http://www.4Guysfromrolla.com/ ′ , False

′ Actually Sends the request and returns the data :
xml . Send

′ Display the HTML both as HTML and as text
Response . Write ′ < h1 > The HTML text < / h1 > < xmp > ′
Response . Write xml . responseText
Response . Write ′ < / xmp >

< hr >

< h1 > The HTML Output < / h1 > ′

Response . Write xml . responseText


Set xml = Nothing
%> 실제 데모를 보기 이 코드에서는 4GuysFromRolla.com의 디폴트 페이지 전체를 요구측 브라우저에 쓴다.response Text 속성에는 대상 페이지 전체의 텍스트가 문자열로 저장된다.바이너리 데이터의 취득 XMLH TTP 오브젝트를 사용해 바이너리 데이터를 반환하는 것은 매우 간단하다.코드는 텍스트의 경우와 거의 같지만 부호 없는 바이트의 배열을 나타내는 responds Body 속성을 사용한다.<%
Response . Buffer = True
Dim objXMLHTTP , xml
Set xml = Server . CreateObject ( ′ Microsoft . XMLHTTP ′ )

xml . Open ′ GET ′ , _
′ http://www.4guysfromrolla.com/webtech/code/mitchell-pres.zip ′ , _
False

xml . Send

′ Add a header to give it a file name :
Response . AddHeader ′ Content - Disposition ′ , _
′ attachment ; filename = mitchell - pres . zip ′

′ Specify the content type to tell the browser what to do :
Response . ContentType = ′ application / zip ′

′ Binarywrite the bytes to the browser
Response . BinaryWrite xml . responseBody

Set xml = Nothing
% > 실제 데모 보기 여기까지는 XML HTTP 를 사용하여 단순한 HTML 과 바이너리 데이터를 얻는 방법을 소개했다.다음은, 데이터를 POST 하는 방법과 XMLHTTP 를 통해서 안전한 페이지를 리퀘스트 하는 방법에 대해 살펴본다.데이터의 POST 리모트 Web 사이트에 POST 요청을 송신하는 것도 매우 간단하다.다음의 예에서는, Web 사이트 「Internet Movie Database」로 영화 「The Usual Suspects」를 검색하고 있다.<%
Response . Buffer = True
Dim objXMLHTTP , xml
Set xml = Server . CreateObject ( ′ Microsoft . XMLHTTP ′ )

′ Notice the two changes in the next two lines :
xml . Open ′ POST ′ , ′ http://www.imdb.com/Find ′ , False
xml . Send ′ select = All & for = The Usual Suspects ′

Response . Write xml . responseText

Set xml = Nothing
%>실제 데모를 표시 여기서는 Open 메서드의 인수로 GET 가 아닌 POST 를 지정해, Send 메서드에 POST 데이터를 지정했다.POST 데이터의 구문은 쿼리 문자열 데이터의 경우와 거의 같고, 문자열의 선두에 ?를 포함할 필요가 없는 것만이 다르다.POST 할 수 있는 정보를 알기 위해서는 POST를 실시하는 폼을 조사해 어떤 요소가 있고, 어떤 종류의 값을 송신하는지를 조사하는 것밖에 방법이 없다.시큐러티 보호된 사이트로의 액세스 XMLHTTP 를 사용하여, 인증이 필요한 데이터에 액세스 할 수도 있다.Open 메서드에는 다음과 같이 사용자 이름과 패스워드를 옵션의 인수로 지정할 수 있다.기본 인증 또는 챌린지 리스폰스 인증(또는 그 양쪽 모두)을 유효하게 했을 때의 IIS 동작과 마찬가지로 이 사용자 이름과 패스워드는 자격 정보를 필요로 하는 웹사이트(WWW-Authenticate header 사용)에만 적용된다.데이터베이스 방식의 인증을 사용하는 사이트(Hotmail이나 Yahoo 메일 등)의 경우는 유저명과 패스워드를 기타 데이터와 마찬가지로 단순 POST 할 필요가 있다.<%
Response . Buffer = True
Dim objXMLHTTP , xml

Set xml = Server . CreateObject ( ′ Microsoft . XMLHTTP ′ )

xml . Open ′ GET ′ , ′ http://www.4Guysfromrolla.com/ ′ , False , _
′ Richard ′ , ′ Welcome ′

′ Actually Sends the request and returns the data :
xml . Send

Response . Write xml . responseText

Set xml = Nothing
% > Microsoft XMLHTTP 컴포넌트에는 기타 메서드나 속성도 있지만, 이 컴포넌트를 사용하는 대부분의 장면, 여기에서 소개한 것만으로 충분하다.실제로 여러가지 시도해 봐 주었으면 한다.Microsoft XML Parser(MSXML) 3.0 서비스 팩 4(SP4)
다른 서버에서 정보 수집

반응형