如何获得IWebBrowser调用的IHttpNegotiate实现?

时间:2010-09-12 18:30:00

标签: c++ com iwebbrowser2

我使用cwebpage_src代码,我需要在点击链接时更新一些HTTP请求标头。据我所知,可以通过IHttpNegotiate-> BeginTransaction的自我实现来完成。但是如何让我的IHttpNegotiate实现调用??

谢谢!

1 个答案:

答案 0 :(得分:2)

虽然我没有写一篇文章的经验,但我相信您需要按asynchronous pluggable protocol中的建议编写this thread

有关如何以及为何这样做的详细信息分散在各个地方的网络上,但我所阅读的最佳说明是this post Igor Tandetnik(简称为简称):< / p>

  

有几个技术层   支持下载和   在Internet Explorer和Internet中导航   WebBrowser控件。在顶部,那里   是WebBrowser本身和MSHTML对象   提供HTML解析和   渲染。客户使用这样的   接口为IWebBrowser2和   IHTMLDocument2与之通信   这些高级对象。

     

WebBrowser和MSHTML使用URL Monikers   库来执行实际下载。   URLMon通过公开其服务   IMoniker和IBinding接口,以及   客户端(比如MSHTML)实现   IBindStatusCallback和一些   相关接口,例如   IHttpNegotiate或IAuthenticate。

     

接下来是异步可插拔   协议处理程序一个APP封装   特定协议的细节,   例如http,file或res。

     

...

     

大多数时候,一个应用程序   托管WebBrowser控件(或BHO   在IE内部运行使用高级别   WebBrowser提供的服务   MSHTML对象。但是,有时候   这些服务不足,而且   需要更低级别的钩子。

     

...

     

能够挂钩会很高兴   进入通讯序列   WebBrowser / MSHTML和URL之间   绰号。不幸的是,确实如此   似乎没有办法做到这一点 - 在   至少,我不知道。所以,我们   看看下一个级别 - a   URL名字对象之间的通信   和一个APP。

     

...

     

现在,很少需要   实施一个完整的APP来自   划伤 - 毕竟,多久做一次   协议实际定义?但   为了我们的目的,它是有用的   实施一个所谓的直通APP   (PAPP)。 pApp是一个对象   实现URL的两面   绰号到APP的沟通,即   它实现了两个IInternetProtocol   和IInternetProtocolSink /   IInternetBindInfo。我们将其注册为   标准的临时处理程序   协议,例如HTTP。现在每当   需要发送HTTP请求,URL   绰号将创建我们的实例   pAPP并要求它完成这项工作。该   然后pAPP创建一个实例   该协议的标准APP   问题(我把它称为目标APP,或者   tAPP,但请注意我已经发明了   我自己的术语,不是   被广泛接受,建议一个   欢迎使用更好的命名约定   并充当其客户。在此刻,   我们的pAPP成为众所周知的   人在这方面的中间人。在最简单的   case,由URL进行的任何方法调用   pAPP上的Moniker转发给tAPP,   和tAPP进行的任何方法调用   pAPP被转发回URL Moniker。   pAPP可以观察,如果   期望,修改每一点   与此请求相关的信息   在...之间来回传递   绰号和tAPP。

Igor有几个示例项目可以帮助您编写自己的pAPP