タイトル : Re^2: MSXML2.XMLHTTP60 をログオフ状態で使用 投稿日 : 2015/08/13(Thu) 09:49 投稿者 : 魔界の仮面弁士
階層が深くなってきたので、またスレッドを切ります。 (この掲示板では、古い投稿には返信できない仕様なので、妙なところに繋いでいますがご容赦を…) > クライアント証明書の入手先もわからないので、、 自己証明書を作成し、そのクライアント証明書を使うか、 もしくは、第三者機関(たとえば下記)から入手した証明書を使う事になります。 https://jp.globalsign.com/contact/request/testpki.html その証明書を、Yahoo 側が受け入れてくれるかどうかは別問題ですが。 (Microsoft 側で検証した限りでは、自己証明書では認証されなかったとのことです) なお、Microsoft サポートからは、本件に関して COM/ActiveX での対応はできず、 .NET Framework での対応が必要との見解が報告されてきています。 そして少なくとも、.NET Framework の「System.Net.HttpWebRequest クラス」であれば、 HTTP ステータス 401 を得られることを確認できています。 ただし、私も Microsoft も、Yahoo API のアクセストークンを持ち合わせていないため、 ステータス 200 が返されるのかどうかまでは確認できません。 でふぁいあんとさんの側で追加検証の上、結果を教えてもらえるとありがたいです。 (HttpWebRequest の使い方が分からない場合、隣の VB.NET 掲示板で質問いただければ対応します) なお、COM ベースで対応できないとの結論に至った理由としては: ・ServerXMLHTTP にしろ XMLHTTP にしろ、https://circus.shopping.yahooapis.jp にアクセスした際は、 クライアントに対して証明書が求められる結果となる。 ・ServerXMLHTTP と XMLHTTP どちらのオブジェクトも、send メソッド時に実行時エラーとなるが、 この時、本来はサーバーから受け取っているはずの応答を、プロパティに設定していないため、 その内容を status プロパティ等で得ることができない状況にある。 ・また、WinHttp.WinHttpRequest.5.1 での動作も同様の実装となっており、 「信頼されていない機関によって証明書チェーンが発行されました。」 のエラーが発生する結果になる。 とのことです。 これだと、無人実行ができなくて、有人実行なら成功することの説明にはなっていない気はするのですが、 何にせよ、開発プラットフォームを .NET 系(VB.NET、C#、PowerShell 等)に移したほうが良さそうですね。 --- 追記: Option Explicit Dim oXMLHTTP Const URL = "https://circus.shopping.yahooapis.jp" Set oXMLHTTP = CreateObject("Msxml2.XMLHTTP.6.0") Call oXMLHTTP.open("GET", URL, False) Call oXMLHTTP.send() Call MsgBox(oXMLHTTP.status) 上記は VBScript のコードです。(test.vbs) ログオン状態での実行検証を行ったところ、当方環境では 32bit / 64bit どちらにおいても、send メソッドが失敗しました。 エラー 800C000E『セキュリティの問題が発生しました。』 ところが、同じコードを VB6 / VBA(32bit) / VBA(64bit) / VB.NET(32bit) / VB.NET(64bit) から 実行した場合には、エラーになることなく status 401 が返却されてきました。 もっとも、.NET アプリケーションからの MSXML の使用はサポートされていないようですけれどね。 https://support.microsoft.com/ja-jp/kb/815112 でふぁいあんとさんの環境では、VB6 + XMLHTTP において、status 400 が 返されてたとのことですが、上記コードでも(401 ではなく)400 が返されるのでしょうか。 まぁいずれにせよ、今回の件については HttpWebRequest クラスに移行するべきなのだと思います。 |