在浏览器端拦截HTTP请求以更改某些html内容

我想做的如下。 什么是最好的方式? 一般答案也没问题。

我想拦截客户端的HTTP请求来改变一些html内容。 例如,我去CNN.com,而不是一篇展示“两只LA狗结婚”的文章,它应该说“荒谬的标题被封锁”。

它应该是顺利的,即使是安全的证书也不会受到干扰。

我正在使用C#。

谢谢!

更新:谢谢大家的答案!

您可以通过他们的filter文件使用Privoxy执行此操作 。 他们有趣的filter就是您想要做的替换类型的一个很好的例子。

要在cnn.com上将“Two LA Dogs Marry”替换为“Ridiculous Title Blocked”,您的操作文件将如下所示:

{ +filter{ridiculous-title-censor} } .cnn.com 

并且您的filter文件看起来像

 # FILTER: ridiculous-title-censor Remove ridiculous titles # This keeps CNN from getting too ridiculous # s/Two LA Dogs Marry/Ridiculous Title Blocked/ig 

本地HTTP代理是可能的,也是最通用的方法。

即你可以使用Fiddler看看它是否适合你。 我支持修改请求/响应以及定期监视流量。

如果您使用Firefox,另一个选择是使用Greasemonkey脚本。 这是一个示例脚本 ,它更改了cnn.com上的主标题

如果您不熟悉制作Greasemoney脚本所需的Javascript编码,则可以使用Platypus插件来编辑页面并自动生成脚本文件。

您可以使用HTTPListener设置代理。 但我认为如果你想做得对,你需要一个更低级别的程序。

  • 打开2个TCP端口(80和443)并主动侦听传入连接。
  • 一旦收到
    • 出去并代表请求者提出请求
  • 检索HTTP响应
  • 检查并更改HTTP响应(如果适用)
    • 也许修改标题(在适当的地方)
  • 转发对请求者的响应

我从一个简单的代理开始,它只是转发所有请求并返回所有响应。 一旦到位,您就可以开始检查响应。

这是一个很好的起点。

这种方法是实现您想要实现的目标的最低效方法。

如果这是客户端应用程序,客户端可能会禁用它,从而使其无用。 它也很难维护,需要更复杂的编程才能确保它与SSL协同工作。

  • 如果使用浏览器插件或工具栏,则需要针对特定​​浏览器进行操作。
  • 如果使用侦听服务器拦截HTTP请求,则在内容加密时提供复杂性和困难,这也是不必要的开销。
  • 如果使用本地代理(意味着客户端的浏览器需要指向本地代理服务),可能是最有效的客户端方法,但仍然具有上述缺点(难以维护等)

我相信你要做的就是完全重新发明轮子。

您提供赏金的事实引发了您确实需要在C#和客户端执行此操作的问题,但“审查坏事”意味着您需要禁止内容,并且任何客户端方法最终都会给客户端带来权力删除此限制。

就个人而言,我在Squid和内容适应function方面取得了巨大成功。

这意味着客户端需要拥有受控的Internet源。 这意味着,如果它们都在局域网中并共享一个公共Internet网关,那么如果您有一台服务器作为代理,那么这很容易实现。

我建议你得到一个小的linux盒子,它可以有一个简单的Ubuntu Server Edition,然后添加Squid。 网上有很多教程,但即使没有它们,实现的水平也很容易实现。

我可能完全偏离主题,但我希望我可以提供帮助。

你可以来中国^ _ ^这样的审查无处不在,你不必自己实施。

好的,这是一个笑话,答案是你可以为这类任务实现浏览器插件。 或者您可能需要在路由器上实现ROUTINGfilter(类似GFW)。

从这里开始 。

它可以通过Windows上的分层服务提供程序完成。

来自维基百科:

"A Layered Service Provider (LSP) is a feature of the Microsoft Windows Winsock 2 Service Provider Interface (SPI). A Layered Service Provider is a DLL that uses Winsock APIs to insert itself into the TCP/IP stack. Once in the stack, a Layered Service Provider can intercept and modify inbound and outbound Internet traffic. It allows processing all the TCP/IP traffic taking place between the Internet and the applications that are accessing the Internet (such as a web browser, the email client, etc). "

例如,AdMuncher拦截并插入http代码以避免广告。 另一个建议是找到一个开源广告拦截程序,看看他们是如何实现它的。

你是说你要为自己的网站拦截这个?

无论如何,它需要在javascript或jQuery中完成,因为C#不是客户端语言。

或者,你可以编写一个工具栏,或者一个简单的chrome插件,这很容易,但它不是C#

您可以搜索库以监控通过代理进行浏览,如下所示:

http://httpproxynet.codeplex.com/

java在此项目中使用的相同概念: http : //www.charlesproxy.com/

听起来很有趣,祝你好运:)

很久以前我已经使用Plugable Mime Filters为IE实现了这个function,所以在我在stackoverflow中搜索c#之后我已经创建了这篇文章,应该可以帮助你开始使用它。

希望这对你有用。

异步可插拔协议可用于此类事物。 虽然,如此处所述INFO:实现类似HTTP的异步可插入协议 :“由于各种原因,Microsoft既不支持也不建议您替换或包装默认的HTTP协议。”