エクセルで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。
クライント側に使う証明書をインストールしておけば、最初の奴でも大丈夫かもかも。。。