Microsoft の XMLHTTP オブジェクトを使用して他の Web ページのデータを取得するはじめに他のWebサイトのデータをHTTPリクエスト経由で取得できる商用COMコンポーネントとしては、AspTearやAspHTTPが有名である。しかし、あまり知られていないが、Microsoftも同様のコンポーネントを提供している。MicrosoftのXML DOM(Document Object Model)コンポーネントスイートには、XMLHTTPオブジェクトが含まれている。XMLHTTPは、もともとリモートサーバー上のXMLドキュメントへのクライアントサイドアクセスをHTTPプロトコルで実現するために開発されたオブジェクトだ。このオブジェクトはリクエスト(POSTSも含む)を送信して、結果のXML、HTMLまたはバイナリデータを取得するための簡単なAPIを公開している。 (注:本稿の執筆時点ではMicrosoftのMSXML 3.0がリリースされたばかりである。これには、Webサーバーやアプリケーションサーバーで使用するためのサーバーサイド用XMLHTTPコンポーネントが含まれている。MSXML 3.0をダウンロードしない限りは前のバージョンを使用することになるが、ほとんどのアプリケーションで問題は発生しないはずだ) また、Internet Explorerの最新版をインストールしている場合は、おそらくいずれかのバージョンのMSXMLがインストールされているだろう。MSXMLを別途インストールする場合は、最新バージョンのMDACか、MSXMLコンポーネントそのものをインストールできる。MSXMLがインストールされていない場合は、 XMLHTTPの基本XMLHTTPの最も基本的な機能は、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("MSXML2.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><p><hr><p><h1>The HTML Output</h1>" Response.Write xml.responseText Set xml = Nothing %> このコードでは、4GuysFromRolla.comのデフォルトページ全体を要求側のブラウザに書き出す。 バイナリデータの取得 XMLHTTPオブジェクトを使用してバイナリデータを返すのは非常に簡単である。コードはテキストの場合とほとんど同じだが、符号なしバイトの配列を表す <% 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 %> ここまでは、XMLHTTPを使用して単純な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 %> ここでは セキュリティ保護されたサイトへのアクセス XMLHTTPを使用して、認証の必要なデータにアクセスすることもできる。 <% 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コンポーネントにはその他のメソッドやプロパティもあるが、このコンポーネントを使用するほとんどの場面、ここで紹介したものだけで十分である。 実際にいろいろ試してみていただきたい。 参考資料著者紹介Richard Lowe(Richard Lowe)
|