エクセルでWebAPI呼んだりSOAP通信する際にHTTP通信を下の感じでやる。
'Getはこっち
Function HTTPGet() As String
Dim httpObj As Object
Set httpObj = CreateObject("MSXML2.XMLHTTP")
httpObj.Open "GET", "http://hoge.fuga.com/someapi", False
httpObj.setRequestHeader "Content-Type", "text/xml;charset=UTF-8"
httpObj.send
HTTPGet = httpObj.responseText
End Function
'Postはこっち
Function HTTPPost() As String
Dim httpObj As Object
Set httpObj = CreateObject("MSXML2.XMLHTTP")
httpObj.Open "POST", "http://hoge.fuga.com/someapi", False
httpObj.setRequestHeader "Content-Type", "text/xml;charset=UTF-8"
httpObj.send "何かのデータ"
HTTPPost= httpObj.responseText
End Function
HTTPの場合はこれで問題ないんだけど、HTTPSでやる場合はちょっと変える。 てか、変えなくてもまともな証明書(ベリサインとかから買ってるやつ)使ってる場合は 多分大丈夫。
てきとーにその辺のツールで作ったやつとか、いわゆるオレオレ証明書使う場合は、 上述のやつだとエラーになる。ブラウザとかで繋いだ時もセキュリティーの警告とか出るけど、 VBAだとエラー扱いになるっぽい。この場合は↓の感じにする。
'Getはこっち
Function HTTPSGet() As String
Dim httpObj As Object
Set httpObj = CreateObject("MSXML2.ServerXMLHTTP") '使うのはServerXMLHTTP
httpObj.Open "GET", "https://hoge.fuga.com/someapi", False
httpObj.setRequestHeader "Content-Type", "text/xml;charset=UTF-8"
'証明書関係のエラーを無視する?オプション
httpObj.setOption 2, httpObj.getOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS
httpObj.send
HTTPSGet= httpObj.responseText
End Function
'Postはこっち
Function HTTPSPost() As String
Dim httpObj As Object
Set httpObj = CreateObject("MSXML2.ServerXMLHTTP") '使うのはServerXMLHTTP
httpObj.Open "POST", "https://hoge.fuga.com/someapi", False
httpObj.setRequestHeader "Content-Type", "text/xml;charset=UTF-8"
'証明書関係のエラーを無視する?オプション
httpObj.setOption 2, httpObj.getOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS
httpObj.send "何かのデータ"
HTTPSPost = httpObj.responseText
' XMLで戻ってくるやつはこっちの方がいいかな
' HTTPSPost= httpObj.responseXML
End Function
参考は例によってさすがのStackOverFlow。
クライント側に使う証明書をインストールしておけば、最初の奴でも大丈夫かもかも。。。