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