コンテンツへスキップ

【VBA】
“MSXML2.XMLHTTP” でパスワード認証したい。

REST API を実行したときに、
ユーザーとパスワードの認証で処理が止まってしまうときの対処法。

【VBA】
“MSXML2.XMLHTTP” でパスワード認証したい。

ユーザー名とパスワード入力の画面で止まる。

unimoniのアバター

こんな感じの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

認証で止まってしまう。

認証方法:後ろに認証情報をつける。

unimoniのアバター

いろいろ調べて、こうなりました。
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-----

参考:

certutil

以上です。

(Visited 11 times, 1 visits today)
タグ:

コメントを残す

メールアドレスが公開されることはありません。