忍者ブログ

IT-Note

インフラ屋さんのメモ書き

VBSでのHTTPリクエストスクリプト例(初期Ver)

未整理状態ですが、今あるスクリプトのコードをそのまま掲載しておきます。
これはHTTPリクエストをVBSで実装したものです。


ここから

Function GetData(ByVal STRING_LIST)

Dim objweb
Dim API_URL
Set objweb = CreateObject("MSXML2.ServerXMLHTTP.6.0")
API_URL = "http://<zabbix_ip_or_fqdn>/zabbix/api_jsonrpc.php"

'---プロキシ接続設定が邪魔をする場合に備えて、プロキシなしで接続するための"1"を設定。
'---このSetProxyが利用したいのでServerXMLHTTP6.0を使っている。
'---後ろの2個の指定は、プロキシナシなら実際には不要。省略できましたので削除しておきます。
'Call objweb.SetProxy("1", "proxy.fqdn:3128", "1.1.1.1")

Call objweb.SetProxy("1")
Call objweb.Open("POST", API_URL, False) 
Call objweb.setRequestHeader("Content-Type", "application/json-rpc") 
Call objweb.send(STRING_LIST) 

GetData = objweb.responseText 
Set objWeb = Nothing 
End Function

ここまで

イメージとしては、外部でリクエスト文字列を組み立てて(SESSION_IDも入れて)、
それをSTRING_LISTという文字列に対して値渡しをする形で、関数を呼び出す感じです。

API_URLは、通常のAPIリクエストの場合は変わるものではありません。
なので、本来は関数内部ではなく、グローバル変数なんかで定義すべきものだと思います。
※グラフを取得する場合に使うURLは、通常リクエスト用とは異なります。

実際には、もうちょっとエラー処理を入れたほうがいいと思います。
不勉強な中で作ったので、Proxy設定がほかのオブジェクトでできるのかとか、
実はIEオブジェクトでもできるんじゃないかとか、
そういう細かいところはあまり気にせず、とりあえず動くもの、として作りました。
その程度の目で見てやってください。

よくあるZabbixのAPIを開設したサイトでは、
「とりあえずHTTPオブジェクトを作る」ということは書いてあるんですが、
インターネットオプションにプロキシ設定が入っている環境の時には、
インターネットオプション自体にプロキシ除外が設定されていたとしても、
普通のリクエストではプロキシが使われてしまうんですよね。
うちの会社はプロキシ設定必須なので、その都度外すわけにもいかず…
なので、Web上のサンプルそのままも使えず、
素人からスタートした私は直接接続する方法を探すのが非常に苦労しました…

ちなみにサーバOS(Win2003Server)ではオブジェクト作成に失敗しました(T_T)
ブログを書いていく中でVBA版でもう少しエラー処理を入れたものを完成させたいですね。

Microsoft TechNet 解説