如何拦截我启动的Internet Explorer实例执行的http请求
How can I intercept http requests which an Internet Explorer instance I started performs?
我的C++程序启动Internet Explorer(它可以与IE6和IE10一起使用),在Internet上显示一些网页;我没有办法修改网页。该网页引用了一个JavaScript文件(在HTML标记中使用<script>
标记)——swfobject JavaScript库的副本。我希望网页使用我提供的这个文件的自定义副本。
我想出了两种可能的方法来解决这个
-
编写一个Internet Explorer连接到的代理服务器;代理获取实际数据,然后重写HTML,以便引用我自己的swfobject副本。不幸的是,这是相当多的工作,可能无法与https一起工作。我现在可以在没有https支持的情况下生活。
-
为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上。)
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 从C++实例化QML
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- C++,系统无法执行指定的程序
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 如何在c++中为模板函数实例创建快捷方式
- 使用C++中的模板和运算符重载执行矩阵运算
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 模板函数,用于在模板化对象上执行成员回调,而无需提供其实例
- 为什么我不能通过执行 "myVector[i].data()" 来实例化一个类,其中 myVector[i].data() 是一个字符串?
- 为非专用模板实例化强制执行编译错误
- 为什么要使用select()调用对inotify实例执行选择性读取
- 获取在C++中实例化的TCL解释器中执行代码的行号
- 'n'提升:线程实例执行'm'作业
- 执行函数以影响不同的模板类实例
- 动态检测并执行类实例的某些方法
- 如何拦截我启动的Internet Explorer实例执行的http请求
- 是否可以在多GPU机器上执行CUDA程序的多个实例
- 构造函数执行顺序/顺序:函数中静态变量(类实例)的依赖初始化