LoginSignup
15
10

More than 3 years have passed since last update.

【ExcelVBA】HTTP/HTTPS通信でPOSTメソッドを使う

Posted at

はじめに

以前に【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&param2=123")
    Debug.Print response
End Sub

参考URL

15
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
10