从Web浏览器控件中捕获所有请求和响应?

7
有没有一种方法可以捕获并打印出Web浏览器控件的所有请求和响应,包括异步请求?
2个回答

5

你有没有考虑使用 Fiddler?他们甚至有一个API,你可能可以用来做这个。

编辑

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

编辑再次出击

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

我想不幸的事实是,网络浏览器控件并不打算用于您想要的方式。它只是用于提供网页/数据,并且不提供您查看数据的访问权限。我认为他们这样做是为了预防有人制作恶意软件/间谍浏览器。最好的方法是将网络浏览器与fiddler(或其他“嗅探”库)配对使用。

我希望能够在Web浏览器控件中捕获一些事件。 - Kenneth J
关于“编辑反击”的结果,我正要发表同样的评论。你认为使用WebClient类进行请求,然后使用浏览器控件显示结果怎么样?我没有太多时间去尝试,但我认为这将是我的下一步。 - Kenneth J
这是可行的,使用NavigateToStream(在WebBrowser上)和OpenRead(在WebClient上),但我不确定要使用哪些事件。听起来像是一个有趣的测试。 - Tony Abrams

4

另一种实现此目的的方法是通过实现自己的异步可插入协议处理程序,但这不是一项简单的任务。基本上,APP是Internet Explorer用于通过URLMON从url下载数据的机制。您可以实现自己的APP来替换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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接