S-JIS[2007-03-16/2007-03-22] 変更履歴

XMLHTTP

VisualBasic.NET2003のXMLHTML(HTTPリクエストを送信してHTTPレスポンスを受け取る)のメモです。


使用準備

MSXML.XMLHTTPというCOMを使うわけなので、(mshtmlと同様に)参照設定をしておくと便利。ソース内で関数名の補完などが出来るようになる。

  1. メニューバーの「プロジェクト(P)」→「参照の追加(R)」で「参照の追加」ダイアログを開く。
  2. 「COM」タブを選択する。
  3. 「Microsoft XML, v3.0」(使用されるDLLはC:\WINDOWS\system32\msxml3.dll)の行を選択してから「選択(E)」ボタンを押す。

なお、MS-XMLのバージョンは使っているマシンによって色々違うと思われる。
msxml3.dllを参照に追加した場合、MSXML2という名前空間が使えるようになって、その中で選択できるクラス(インターフェース)にはバージョン4(XMLHTTP40)まで含まれていたが、実行時にエラーになった(爆)
実際に使えるのはMSXML2.XMLHTTP30Class

参考


HTTP要求の送信とHTTP応答の受信

	Dim http As New MSXML2.XMLHTTP30Class
	http.open("GET", "http://www.ne.jp/asahi/hishidama/home/tech/index.html", False)
	http.send()

	AxWebBrowser1.Navigate("about:blank")
	AxWebBrowser1.Document.write(http.responseText)

open()でHTTPのメソッド(GETやPOST)、要求の送信先、同期モードを指定する。
同期モードは、send()の呼び出しが「応答を待たずにすぐ戻る」「応答が来るまで戻らない」を選択する。Falseだと応答が来るまで戻らない。

send()を呼ぶとHttpRequestが送信され、HttpResponseが返ってくる。

戻ってきたレスポンスは、responseText(文字列)・responseBody(バイト配列)・responseStream(ストリーム)といった形で取得できる。
文字列の場合はUNICODEでないと文字化けする(VB内部がUNICODEだから)。その場合はresponseBodyからUNICODEへ変換してやる。

このレスポンスの文字列をWebBrowserに渡すとブラウザーに表示することも出来る。
が、WebBrowserで直接遷移した場合とは微妙に動作が異なる(フォントが違ったりとか)…。
WebBrowserにHTMLの文字列を直接渡すにはDocumentのwrite()を使うわけだが、初めてWebBrowserオブジェクトを作った時点ではDocumentは空(Nothing)なので、初期化してやる必要がある。それがabout:blankへのNavigate()。

参考


XMLHTTPと同様のクラス

XMLHTMLはCOMだが、同様の機能を持つクラスが.NET Frameworkに用意されている。[2007-03-22]


技術メモへ戻る
メールの送信先:ひしだま