【ExcelVBA】HTTP/HTTPS通信でPOSTメソッドを使う
はじめに
以前に【ExcelVBA】HTTP/HTTPS通信でWebページを取得するを投稿した後、すぐにPOSTメソッドを使う処理を作ろうと思っていたのですが、何だかんだで先送りになって1年近く経ってしまいました。
そこで休暇を利用してPOSTメソッドの処理をサッと作ってみました。
作成したクラス
- POSTメソッドに関する記事はそれほど多くありませんでしたが、こちらの記事が非常に参考になりました。
HttpClient.bas
Option Explicit
'--------------------------------------------------------------------------------
' HTTP通信用クラス。
'--------------------------------------------------------------------------------
' HTTP通信用オブジェクト
Private httpObj As Object
'--------------------------------------------------------------------------------
' コンストラクタ
'--------------------------------------------------------------------------------
Public Sub Class_Initialize()
Set httpObj = CreateObject("MSXML2.ServerXMLHTTP") ' TLS1.2に対応
End Sub
'--------------------------------------------------------------------------------
' デストラクタ
'--------------------------------------------------------------------------------
Public Sub Class_Terminate()
Set httpObj = Nothing
End Sub
'--------------------------------------------------------------------------------
' 引数のURLにPostメソッドで送信する。
'
' url:URL文字列。
' urlParams:URLパラメーター。
' return:レスポンスの文字列。
'--------------------------------------------------------------------------------
Public Function PostContents(url As String, urlParams As String) As String
httpObj.Open "POST", url, False
httpObj.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
httpObj.send (urlParams)
' readyState=4で読み込みが完了
Do While httpObj.readyState < 4
DoEvents
Loop
Dim statusCode As Integer
statusCode = httpObj.Status
' HTTPのステータスコードが200(OK)以外であれば、ステータスコードなどを返す。
If (statusCode = 200) Then
'PostContents = httpObj.responseText ' レスポンスの文字コードがShift_JIS(MS932)の時はこちらを使う。
PostContents = StrConv(httpObj.responsebody, vbUnicode)
Else
PostContents = "HTTP StatusCode:" & statusCode & ", HTTP StatusText:" & httpObj.statusText
End If
End Function
テストコード
-
httpbin.orgというサイトではPOSTメソッドが使えるため、このサイトを借りてテストコードを作成しました。
- 送信しているパラメーターは適当な値です。
HttpClientTest.bas
'--------------------------------------------------------------------------------
' 引数のURLにPostメソッドで送信する。
'--------------------------------------------------------------------------------
Public Sub Test_PostContents()
Dim httpObj As HttpClient
Set httpObj = New HttpClient
Dim response As String
' レスポンスはUTF-8。
response = httpObj.PostContents("http://httpbin.org/post", "param1=abc¶m2=123")
Debug.Print response
End Sub
参考URL
HttpClient.bas
Option Explicit
'--------------------------------------------------------------------------------
' HTTP通信用クラス。
'--------------------------------------------------------------------------------
' HTTP通信用オブジェクト
Private httpObj As Object
'--------------------------------------------------------------------------------
' コンストラクタ
'--------------------------------------------------------------------------------
Public Sub Class_Initialize()
Set httpObj = CreateObject("MSXML2.ServerXMLHTTP") ' TLS1.2に対応
End Sub
'--------------------------------------------------------------------------------
' デストラクタ
'--------------------------------------------------------------------------------
Public Sub Class_Terminate()
Set httpObj = Nothing
End Sub
'--------------------------------------------------------------------------------
' 引数のURLにPostメソッドで送信する。
'
' url:URL文字列。
' urlParams:URLパラメーター。
' return:レスポンスの文字列。
'--------------------------------------------------------------------------------
Public Function PostContents(url As String, urlParams As String) As String
httpObj.Open "POST", url, False
httpObj.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
httpObj.send (urlParams)
' readyState=4で読み込みが完了
Do While httpObj.readyState < 4
DoEvents
Loop
Dim statusCode As Integer
statusCode = httpObj.Status
' HTTPのステータスコードが200(OK)以外であれば、ステータスコードなどを返す。
If (statusCode = 200) Then
'PostContents = httpObj.responseText ' レスポンスの文字コードがShift_JIS(MS932)の時はこちらを使う。
PostContents = StrConv(httpObj.responsebody, vbUnicode)
Else
PostContents = "HTTP StatusCode:" & statusCode & ", HTTP StatusText:" & httpObj.statusText
End If
End Function
-
httpbin.orgというサイトではPOSTメソッドが使えるため、このサイトを借りてテストコードを作成しました。
- 送信しているパラメーターは適当な値です。
HttpClientTest.bas
'--------------------------------------------------------------------------------
' 引数のURLにPostメソッドで送信する。
'--------------------------------------------------------------------------------
Public Sub Test_PostContents()
Dim httpObj As HttpClient
Set httpObj = New HttpClient
Dim response As String
' レスポンスはUTF-8。
response = httpObj.PostContents("http://httpbin.org/post", "param1=abc¶m2=123")
Debug.Print response
End Sub
参考URL
Author And Source
この問題について(【ExcelVBA】HTTP/HTTPS通信でPOSTメソッドを使う), 我々は、より多くの情報をここで見つけました https://qiita.com/nkojima/items/65df2b165eb40cdd08c1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .