VisualBasic.NET2003のXMLHTML(HTTPリクエストを送信してHTTPレスポンスを受け取る)のメモです。
MSXML.XMLHTTPというCOMを使うわけなので、(mshtmlと同様に)参照設定をしておくと便利。ソース内で関数名の補完などが出来るようになる。
なお、MS-XMLのバージョンは使っているマシンによって色々違うと思われる。
msxml3.dllを参照に追加した場合、MSXML2という名前空間が使えるようになって、その中で選択できるクラス(インターフェース)にはバージョン4(XMLHTTP40
)まで含まれていたが、実行時にエラーになった(爆)
実際に使えるのはMSXML2.XMLHTTP30Class
。
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()。
XMLHTMLはCOMだが、同様の機能を持つクラスが.NET Frameworkに用意されている。[2007-03-22]