VBAからhttpでPOSTする場合のメモ

2019年11月28日

ACCESSからHTTP経由でXMLなどを取得したい、といった場合は、

VBA Microsoft.XMLHTTP

あたりで検索すると、GETを用いた方法が結構出てきますが、データをPOSTしたい場合はちょっとだけ追記が必要だったので、記録しておきます。ちなみに、少しの文字列渡すだけならGETでも良いんじゃない?という意見も当然ありますが、受け側がCodeIgniterみたいなフレームワークを使用している場合は(設定によりますが)GETをすべからく殺してしまうので、POSTでないと駄目だったりします。

1.「メニュー」>「参照設定」から、「Microsoft XML. v6.0」にチェックを入れる

2.以下のような感じでPOSTする。 POSTの場合、Callの行のヘッダー出力が必要です。

dim httpObj, res

' POSTする
Set httpObj = CreateObject("Microsoft.XMLHTTP")
httpObj.Open "POST", "http://example.com/hoge.php", False
'httpObj.Open "POST", "http://example.com/hoge.php", False, "id", "pass"    ' BASIC認証な場合、こんな感じで引数追加。
Call httpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")  ' POSTの場合はこれが必要。
httpObj.send ("param1=hoge¶m2=fuga") ' GETの場合は引数無しで。
Set res = httpObj.responseXML

MsgBox res.XML