tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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 クラスに移行するべきなのだと思います。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。