【问题标题】:Capturing all requests and responses from the web browser control?捕获来自 Web 浏览器控件的所有请求和响应?
【发布时间】:2010-08-16 15:45:35
【问题描述】:

有没有办法捕获和打印来自网络浏览器控件的所有请求和响应,包括异步请求?

【问题讨论】:

    标签: c# .net wpf wpf-controls webbrowser-control


    【解决方案1】:

    您是否考虑过使用Fiddler?他们甚至有一个API,您也许可以使用它。

    编辑

    您可以尝试使用Navigated eventLoadCompleted event 获取响应信息。您可以使用Navigating event 获取请求信息。异步请求可能会发生这些事件,但我不确定。

    编辑反击

    好吧,我使用上述事件进行了一些测试,但恐怕我一无所获。这些事件没有给我任何我可以使用的东西。即使他们可以访问 webresponse 和 webrequest,但在我的测试中它们始终是空/空。

    我想可悲的现实是,Web 浏览器控件并非旨在以您想要的方式使用。它仅用于提供网页/数据,并不为您提供查看数据的访问权限。我认为他们是作为 C.Y.A.防止有人制作恶意软件/间谍软件浏览器的措施。

    您最好的选择是将网络浏览器与 fiddler(或其他一些“嗅探”库)耦合。

    【讨论】:

    • 我有点希望可以在 Web 浏览器控件中捕获一些事件。
    • 关于“编辑反击”结果,我正要评论说同样的话。您如何看待使用 WebClient 类发出请求然后使用浏览器控件显示结果。我没有太多时间去体验,但我认为这将是我的下一步。
    • 这是可行的,使用 NavigateToStream(在 webbrowser 上)和 OpenRead(在 webclient 上),但我不确定要使用哪些事件。听起来很有趣。
    【解决方案2】:

    实现此目的的另一种方法是实现您自己的Asynchronous Pluggable Protocol 处理程序,但这不是一项简单的任务。基本上,应用程序是 Internet Explorer 通过 URLMON 从 url 下载数据的机制。您可以实现自己的应用程序来替换 URLMON 使用的默认处理程序,这将允许您控制所有请求和响应。

    除了替换默认处理程序之外,您还可以实现一个包装它的 APP。一个常见的例子是由 Igor Tandetnik 创建的PassThroughAPP,它展示了如何完成这样的事情。您还可以在此代码项目article 中找到 C# 实现。我相信您最感兴趣的接口是IHttpNegotiateOnResponse 方法,它允许客户端检查请求和响应标头。

    PassThroughApp 存在一些问题,详细说明以及可能的解决方案here。下面还有一些资源。

    http://support.microsoft.com/?id=kb;en-us;303740 http://www.codeproject.com/KB/aspnet/AspxProtocol.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 2018-12-11
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多