如何拦截我启动的Internet Explorer实例执行的http请求

How can I intercept http requests which an Internet Explorer instance I started performs?

本文关键字:实例 执行 http 请求 Explorer Internet 何拦截 启动      更新时间:2023-10-16

我的C++程序启动Internet Explorer(它可以与IE6和IE10一起使用),在Internet上显示一些网页;我没有办法修改网页。该网页引用了一个JavaScript文件(在HTML标记中使用<script>标记)——swfobject JavaScript库的副本。我希望网页使用我提供的这个文件的自定义副本。

我想出了两种可能的方法来解决这个

  1. 编写一个Internet Explorer连接到的代理服务器;代理获取实际数据,然后重写HTML,以便引用我自己的swfobject副本。不幸的是,这是相当多的工作,可能无法与https一起工作。我现在可以在没有https支持的情况下生活。

  2. 为Internet Explorer实现一个异步协议插件,它可以拦截所有http请求。我知道JavaScript文件总是使用http检索的,所以我可以拦截对swfobject JavaScript文件的访问,并生成我自己的文件。遗憾的是,这似乎也是不可能的,微软的一个支持页面解释了

    Internet Explorer忽略使用的CLSID以外的值覆盖HKEY_CURRENT_ROOT\PROTOCOLS\Http的天真尝试

    这听起来像是将"http"与自定义协议处理程序挂钩是行不通的;在任何情况下,如果存在现有的http协议处理程序,这种方法也会有问题。

有没有比这两种更好的方法来解决这个问题?

根据您的需求的复杂性,Fiddler可能是自定义代理的有用替代方案,因为它可以自动重写请求和响应,并且可以快速编写您想要的脚本。

它还可以很好地与HTTPS配合使用,因此该部分是"免费的"。

想要让Fiddler根据您指定的规则自动重写请求和响应、添加或删除标头或标记/忽略会话吗?查看FiddlerScript食谱

这是食谱的链接

如果你需要嵌入它,它也可以嵌入为FiddlerCore。

正如@MSchangers在下面指出的那样,Fiddler的可选SSL拦截是在使用它之前应该考虑的权衡。这里有文档记录,我在这个答案中写了一个简短的总结。

只要提出一个想法,就可以在自己的进程中挂接WinSock send()和recv()函数。这是一种夹在中间的人。。该解决方案具有高复杂性的缺点。

简单,只需翻译URL即可。将指向您的副本的swfobject URL更改为file:// URL。

(你实际上并没有启动IExplorer.EXE,是吗?这不是你应该打开网页的方式。你要么用ShellExecute启动URL,让用户选择浏览器,要么在你自己的应用程序中嵌入IE的核心MSHTML。Internet Explorer不是Windows的一部分,可能不存在,例如在Windows N上。)