VBSでHTTPリクエストを投げて、レスポンスを受け取る

現場でツールとして作る機会があったのですが、
どのAPIを使うのかが良く分からなくてちょっとハマったので備忘録的に書いておく。


今回は自分のサーバーにシンプルなテキストを置いて、
そいつにリクエストを投げています。

'************************************************************
'定数
'************************************************************
'' レスポンスを内容を一時出力するテキスト
Const RESPONSE_TEXT = "C:\response.txt"

'' リクエスト対象のURL
Const URL = "http://necoyama3.sakura.ne.jp/tmp/test.txt"

'************************************************************
' メイン処理
'************************************************************
Dim oXMLHTTP   ' MSXMLオブジェクト
Dim oStream    ' ADODB.Streamオブジェクト
Dim resData    ' レスポンス

Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.3.0")

' 同期処理
oXMLHTTP.Open "GET", URL, False
oXMLHTTP.Send

If oXMLHTTP.Status = 200 Then
	Set oStream = CreateObject("ADODB.Stream")
	oStream.Open
	oStream.Type = 1
	oStream.Write oXMLHTTP.responseBody
	oStream.SaveToFile RESPONSE_TEXT
	oStream.Close
	
	' レスポンスファイルを読み込む
	resData = ReadTextAll(RESPONSE_TEXT)
	
	MsgBox resData
Else
	resData = "Error returnCode:" & oXMLHTTP.Status
	MsgBox resData
End If

'************************************************************
'関数ID          :ReadTextAll
'説明            :テキストファイルの内容をすべて読み込みます
'引数            :filePath ・・・ テキストファイルパス
'戻り値          :ファイルの内容のテキスト
'************************************************************
Function ReadTextAll(filePath)
	Dim objFSO       ' ファイルシステムオブジェクト
	Dim resStream    ' テキストストリームオブジェクト
	Dim resData      ' テキスト内容
	
	Set objFSO  = WScript.CreateObject("Scripting.FileSystemObject")
	Set resStream = objFSO.OpenTextFile(filePath, 1)
	
	resData = resStream.ReadAll
	resStream.Close
	
	objFSO.DeleteFile filePath
	
	ReadTextAll = resData
End Function

ポイントはXMLHttpRequestオブジェクトを生成する為に「MSXML2.XMLHTTP」を使用しています。
IEでは、ActiveXObject("Microsoft.XMLHTTP") を使用しており、
バージョンによって、ActiveXObject("Msxml2.XMLHTTP.3.0")なんかもあります。
「MSXML2.XMLHTTP」のファイルは一般的には、「Msxml3.dll」だそうで、
IEでは6.0から同梱されているそうです。
下記のサイトを参考にさせて頂きました。
http://www.kanaya440.com/contents/tips/vbs/007.html
解説 : XMLHttpRequest


「ADODB.Stream」を使っているのは、UTF-8以外の文字コードも扱えるという事で。
気合いで頑張ればなんでも出来ますね( ̄∇+ ̄)v