QA@IT

BHOを使ったレスポンスヘッダの取得について

3473 PV

お世話になります。
現在、以下の環境でIEアドインを作成しています。
・Visual Studio 2010 (.NET Framework 3.5)
・C#
・IE10 + BHO (Browser Helper Objects)

行いたいことは、HTTPのレスポンスの中から、サーバより返却された応答ヘッダの各種情報を得ることです。
(Content-TypeやContent-Lengthなど、返却されたヘッダ全て)

現時点では、DWebBrowserEvents2_DocumentCompleteEventHandler で設定したハンドラ内にて、
IHTMLDocument2 のオブジェクトを取得し、HTML内のBODYなどは得ることが出来ていますが、
ヘッダ情報をどの様に取得するのかどうにも情報が見つかりません。
何か情報をお持ちの方、是非教えてください。宜しくお願い致します。

(そもそも、DocumentCompleteイベント内では取得出来ないのでしょうか?)

回答

直接の回答ではないので申し訳ありませんが。。

HTTPのレスポンスの中から、サーバより返却された応答ヘッダの各種情報を得ることです。

技術的には可能だった気がします。

なんですが、この辺いじってたのがもう10数年以上前なので詳細覚えてません (^^;
基本的にかなり COM/OLE, IE の実装に関する知識が必要です。

そもそも、DocumentCompleteイベント内では取得出来ないのでしょうか?

できないはずです。(足がかりとなるようなイベント引数が見当たらないですよね?)

WebBrowser.ActiveXInstance から .NET の WebBrowser コントロールがラップしている ShDocView ActiveX コントロールのインスタンスを取得するところから始まって、そこから先はずーっと COM/OLE の世界です。

具体的には、IE が内部で使用している

IHttpNegotiate::OnResponse method
http://msdn.microsoft.com/en-us/library/ie/ms775055(v=vs.85).aspx

に応答ヘッダが含まれています。

ShDocView が状態通知を行うためにコールバックしている

IBindStatusCallback interface
http://msdn.microsoft.com/en-us/library/ie/ms775060(v=vs.85).aspx

を実装したオブジェクトに相乗りで IHttpNavigate を実装することで、ShDocView が接続先から応答を受け取った時に、応答の詳細情報の通知として IHttpNavigate:OnRecieve をコールバックするようです。

なんですが、肝心の「IBindStatusCallback を実装した(ユーザ定義の)オブジェクト」をどこで差し込むべきなのかが思い出せない&検索してもよい例が見つけれませんでした。

編集 履歴 (1)
  • hidoriさん、情報をご提供いただき、ありがとうございます。
    本文が取得できるのだから、ヘッダもその近辺にあるのでは、と思っていましたが、なかなかに難しそうですね・・・
    いただいた情報・キーワードを元に調査を続行してみます。
    また場合によってはヘッダ以外から情報を得る方向も検討してみます。
    もし具体的な取得方法など判明しましたら、こちらにフィードバックしたいと思います。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。