japan.internet.comThe Internet & IT Network
RSS
  • ニュース
  • コラム
  • リサーチ
  • ヘッドライン
  • 特集
  • ブログ
  • プレスリリース
  • 専門チャンネル
  • イベント
  • ランキング
  • ニュースメール
2008年10月12日
文字サイズ文字サイズ小文字サイズ中文字サイズ大
デベロッパー2005年10月5日 11:20

Microsoft の XMLHTTP オブジェクトを使用して他の Web ページのデータを取得する

海外海外internet.com発の記事
  • このエントリーを含むはてなブックマーク
  • この記事をクリップ!
  • Buzzurlにブックマーク
  • Yahoo!ブックマークに登録
  • newsing it!

はじめに

 他のWebサイトのデータをHTTPリクエスト経由で取得できる商用COMコンポーネントとしては、AspTearAspHTTPが有名である。しかし、あまり知られていないが、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がインストールされていない場合は、Server.CreateObject("Microsoft.XMLHTTP")を実行したときにInvalid ProgIDエラーが発生する。

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のデフォルトページ全体を要求側のブラウザに書き出す。responseTextプロパティには、対象ページ全体のテキストが文字列として格納される。

バイナリデータの取得

 XMLHTTPオブジェクトを使用してバイナリデータを返すのは非常に簡単である。コードはテキストの場合とほとんど同じだが、符号なしバイトの配列を表すrespondsBodyプロパティを使用する。

<%
  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
%>

 実際のデモを表示

 ここではOpenメソッドの引数にGETではなくPOSTを指定し、SendメソッドにPOSTデータを指定している。POSTデータの構文はクエリ文字列データの場合とほとんど同じで、文字列の先頭に?を含める必要がないことだけが異なる。POSTできる情報を知るためには、POSTを行うフォームを調べ、どんな要素があり、どんな種類の値を送信するかを調べるしか方法はない。

セキュリティ保護されたサイトへのアクセス

 XMLHTTPを使用して、認証の必要なデータにアクセスすることもできる。Openメソッドには、次の例に示すように、ユーザー名とパスワードをオプションの引数として指定できる。基本認証またはチャレンジレスポンス認証(またはその両方)を有効にしたときのIISの動作と同様に、このユーザー名とパスワードは、資格情報を必要とするWebサイト(WWW-Authenticateヘッダーを使用)にのみ適用される。データベース方式の認証を使用するサイト(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コンポーネントにはその他のメソッドやプロパティもあるが、このコンポーネントを使用するほとんどの場面、ここで紹介したものだけで十分である。

 実際にいろいろ試してみていただきたい。

参考資料

著者紹介

Richard Lowe(Richard Lowe)
chadich@yahoo.com
Spherion社(Technology Group)開発サービスコンサルタント。
最新トップニュース
データメーション
【データメーション】
在宅勤務者にやめて欲しいこと(10月10日)
ベンチャー専門家の目利きブログ「なぜこの企業は伸びるのか?」
【ベンチャー専門家の目利きブログ「なぜこの企業は伸びるのか?」】
「お客様に使われる商品開発は『1%の閃きと99%の努力』から!」/株式会社エス・アンド・ケイ(10月10日)
Graphic Design Forum
【Graphic Design Forum】
活気に満ちた誕生日をどうぞ (10月8日)
エンジニアの独り言
【エンジニアの独り言】
得体の知れない情報(?)との向き合い方(9月17日)
最新テクノロジーの意外な処方箋
【最新テクノロジーの意外な処方箋】
昆虫と退屈なことについて(9月16日)
台湾企業が席巻する電子製品製造
台湾企業が席巻する電子製品製造
蔓延する市場の不透明感、不況の今だからこそ考える生産アウトソーシング(10月10日)
IT マネジメント
IT マネジメント
「後戻りできない」 Windows 7(10月10日)
DevX
DevX
XQueryの制御構造の活用(10月10日)
最新ハイテク講座
最新ハイテク講座
ハイビジョン対応へ、どこまで進化するのか「レコーダー」(10月10日)
百式のネットビジネス研究
百式のネットビジネス研究
あなたの Blog にライブサーチを設置してくれる「Sikbox」(10月10日)
週刊-サイト別アクセス状況データ
週刊-サイト別アクセス状況データ
ビデオリサーチインタラクティブ調査(月間インターネットオーディエンスデータ)(10月9日)
検索エンジンマーケティング
検索エンジンマーケティング
SEO は外部と内部どっちの対策が効果的?(10月9日)
気になるトレンド用語
気になるトレンド用語
はてなブックマークが変わる!そもそもブラウザのお気に入りと何が違うの?(10月8日)
e-Japan 先端テクノロジー解説
e-Japan 先端テクノロジー解説
行政サービスのマルチチャネル化について(10月8日)
ウチのサイトを SEO
ウチのサイトを SEO
ちゃんと title つけていますか?(10月8日)
海外のインターネットコムアメリカ韓国ドイツトルコ
Copyright 2008 Jupitermedia Corporation All Rights Reserved.http://www.internet.com/