1

我想做如下。最好的方法是什么?一般的答案也可以。

我想在客户端拦截一个 HTTP 请求以更改一些 html 内容。例如,我访问 CNN.com,而不是显示“两只洛杉矶狗结婚”的文章,而应该说“可笑的标题被屏蔽”。

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

我正在使用 C#。

谢谢!

更新:谢谢大家的回答!

4

11 回答 11

11

您可以通过Privoxy过滤器文件执行此操作。他们有趣的过滤器是您想要做的那种替换的一个很好的例子。

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

{ +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
于 2012-05-16T19:49:40.630 回答
4

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

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

于 2012-05-14T16:05:14.827 回答
4

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

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

于 2012-05-20T15:34:08.460 回答
2

您可以使用 HTTPListener 设置代理。但我认为如果你想把它做好,你需要一个更底层的程序。

  • 打开 2 个 TCP 端口(80 和 443)并主动监听传入连接。
  • 一旦收到
    • 代表请求者外出提出请求
  • 检索 HTTP 响应
  • 检查并更改 HTTP 响应(在适当的情况下)
    • 也许修改标题(在适当的情况下)
  • 将响应转发给请求者

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

这是一个很好的起点。

于 2012-05-22T06:40:42.767 回答
2

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

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

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

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

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

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

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

我建议你买一个小的 linux 盒子,里面可以有一个简单的 Ubuntu 服务器版,然后添加 Squid。网络上到处都是教程,但即使没有教程,实现的水平也变得很容易。

我可能已经完全跑题了,但我希望我能提供帮助。

于 2012-05-23T08:15:29.477 回答
1

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

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

于 2012-05-23T10:13:45.017 回答
1

取自这里

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

于 2012-05-23T13:48:41.107 回答
0

你是说你想为你自己的网站截取这个吗?

在任何情况下,它都需要在 javascript 或 jQuery 中完成,因为 C# 不是客户端语言。

于 2012-05-14T15:58:44.957 回答
0

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

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

http://httpproxynet.codeplex.com/

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

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

于 2012-05-22T10:11:32.367 回答
0

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

希望这对你有用。

于 2012-05-23T02:12:46.737 回答
0

Asynchronous Pluggable Protocols can be used for this type of thing. Although, as stated here INFO: Implementing HTTP-like Asynchronous Pluggable Protocols: "For various reasons, Microsoft neither supports nor recommends that you replace or wrap the default HTTP protocol."

于 2012-05-23T14:47:36.313 回答