REST API を実行したときに、
ユーザーとパスワードの認証で処理が止まってしまうときの対処法。
【VBA】
“MSXML2.XMLHTTP” でパスワード認証したい。
Contents
ユーザー名とパスワード入力の画面で止まる。
こんな感じのVBA のコードでREST API を実行するときに、
ユーザーとパスワードの認証で止まってしまうので、自動で認証を通るようにしたい。
こんな感じのVBA のコードでREST API を実行するときに、
ユーザーとパスワードの認証で止まってしまうので、自動で認証を通るようにしたい。
Function autoLogin()
'--------------------------------------------------------------------
' 変数定義
'--------------------------------------------------------------------
Dim testHttp As Object ' XMLHTTP オブジェクト
Dim strURL As String ' アクセス先URL
Dim strHtml As Variant
'------------------------------------------------------------------
' URL
'------------------------------------------------------------------
strURL = "https://test.beccou.com/wp-json/"
'------------------------------------------------------------------
' XMLHTTP オブジェクトを生成する
'------------------------------------------------------------------
Set testHttp = CreateObject("MSXML2.XMLHTTP")
testHttp.Open "GET", strURL, False
'------------------------------------------------------------------
' リクエストを送信する
'------------------------------------------------------------------
testHttp.send (Null)
Debug.Print testHttp.responseText
End Function
認証で止まってしまう。
認証方法:後ろに認証情報をつける。
いろいろ調べて、こうなりました。
URL の後ろにユーザー名とパスワードを文字列でつけておくという単純なソリューション。
testHttp.Open "GET", strURL, False ,"ユーザー名" ,"パスワード"
サイト認証ができて、値が返ってきました。
認証方法: .setRequestHeader(Base64)で認証
こんな感じにすると、ユーザー名とパスワードをBase64 変換したもので渡せます。
上記でうまく行かない時などに。
VBA のコードはこんな感じで。
Function autoLogin()
'--------------------------------------------------------------------
' 変数定義
'--------------------------------------------------------------------
Dim testHttp As Object ' XMLHTTP オブジェクト
Dim strURL As String ' アクセス先URL
Dim strHtml As Variant
Dim strBase64 As String
'------------------------------------------------------------------
' URL
'------------------------------------------------------------------
strURL = "https://test.beccou.com/wp-json/"
'------------------------------------------------------------------
' Bsae64 認証
'------------------------------------------------------------------
strBase64 = "Basic dXNlcjpwYXNzd29yZA==" '<---"user:password" をBase64 に変換
'------------------------------------------------------------------
' XMLHTTP オブジェクトを生成する
'------------------------------------------------------------------
Set testHttp = CreateObject("MSXML2.XMLHTTP")
testHttp.Open "GET", strURL, False
'------------------------------------------------------------------
' リクエストを送信する
'------------------------------------------------------------------
testHttp.setRequestHeader "Authorization", strBase64 '<--- Bacic 認証
testHttp.send (Null)
Debug.Print testHttp.responseText
End Function
参考:
https://gist.github.com/hiraba-dqx/8ade68c305001cbed55b
Base 64 変換方法について
Windows OS でBase64 変換する場合は、コマンドプロンプトで下記の手順で行えます。
File-A にユーザー名とパスワードを記入しておく。
user:password
コマンドプロンプトで下記を実行。
certutil -encode File-A File-B
入力長 = 13
出力長 = 78
CertUtil: -encode コマンドは正常に完了しました。
File-B への出力内容
-----BEGIN CERTIFICATE-----
dXNlcjpwYXNzd29yZA==
-----END CERTIFICATE-----
参考:
以上です。
(Visited 3,969 times, 2 visits today)