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

时间:2012-05-14 15:54:39

标签: c#

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

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

即使是安全的证书也不会受到干扰。

我正在使用C#。

谢谢!

更新:谢谢大家的答案!

11 个答案:

答案 0 :(得分:11)

您可以通过Privoxy使用filter files执行此操作。他们的fun filter就是你想要做的替换的一个很好的例子。

在cnn.com上用“Ridiculous Title Blocked”取代“Two LA Dogs Marry”,你的行动档案将如下所示:

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

并且您的过滤器文件看起来像

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

答案 1 :(得分:4)

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

即。您可以使用Fiddler查看它是否适合您。除了定期观看流量外,我还支持修改请求/响应。

答案 2 :(得分:4)

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

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

答案 3 :(得分:2)

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

  • 打开2个TCP端口(80& 443)并主动侦听传入连接。
  • 收到后
    • 代表请求者前往并提出请求
  • 检索HTTP响应
  • 检查并更改HTTP响应(如果适用)
    • 也许修改标题(如果适用)
  • 转发对请求者的回复

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

这是一个很好的起点。

答案 4 :(得分:2)

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

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

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

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

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

就我个人而言,Squid取得了巨大的成功,而且content adaptation features

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

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

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

答案 5 :(得分:1)

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

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

答案 6 :(得分:1)

取自here

可以通过Windows上的Layered Service Provider来完成。

来自维基百科:

"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代码以避免广告。另一个建议是找到一个开源广告拦截程序,看看他们是如何实现它的。

答案 7 :(得分:0)

您是说要为自己的网站拦截此内容吗?

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

答案 8 :(得分:0)

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

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

http://httpproxynet.codeplex.com/

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

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

答案 9 :(得分:0)

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

希望这对你有用。

答案 10 :(得分:0)

Asynchronous Pluggable Protocols可用于此类事情。虽然如此处INFO: Implementing HTTP-like Asynchronous Pluggable Protocols所述:“由于各种原因,Microsoft既不支持也不建议您替换或包装默认的HTTP协议。”