本文无意成为 Proxomitron 的入门文章,也不打算将 Proxomitron 与流行的广告过滤软件进行对比。如标题所言,我将展示 Proxomitron 的一些基本和特殊的应用,如果你看完本文有亲身一试的冲动,那么本文的目的就达到了。

Proxomitron 在2004年因作者不幸逝世(天妒英才)后即停止了更新,然而其前瞻性的设计使得至今仍无出其右者。事实上,广告过滤只是 Proxomitron 最基本的功能,其本身更象是个小型的编程语言,通过编制规则,我们可以实现比移除广告更有意义的应用。以下为大家展示冲浪过程中的一些常见问题及 Proxomitron 的解决之道。

过滤效果展示

广告过滤是 Proxomitron 的最基本功能,但不是本文的重点,以下稍做展示。以 http://news.sina.com.cn/c/2007-11-20/163614349509.shtml 为例,过滤前,广告和无关内容甚至占据了比新闻内容更多的版面:

sina before filtering

过滤后,保留了如上图红框所示的新闻正文及相关新闻部分,加大了新闻正文的阅读面积;移除了所有广告和不重要内容:

sina after filtering

User CSS/User Script 展示

User CSS/User Script 是 opera 中的提法,FireFox 通过 Stylish 和 Greasemonkey 扩展也有类似功能。然而通过 Proxomitron ,我们可以给 IE 等任何主流浏览器增加此功能。以下以 Google 为例,展示添加 User Css 的效果。添加前: Google before

添加后,界面配色发生变化,并增加了缩略图及按时间筛选搜索结果功能:

Google after

点击 Thumbnails 后:

Google Thumbnails

Flash 延缓下载展示

Flash 在美化 web 世界的同时,也成为很多广告的宿主,并大大降低了浏览器打开页面的速度。以 www.jsmcc.com 为例,如果我们仅仅是想登陆进去查下账单,大量的 flash 广告和导航对我们并无用处,过滤前:

jsmcc before

过滤后:所有 flash 内容被转换为 “Toggle Flash” 按钮,在我们点击 Toggle 前,flash 内容并没有被下载,因此大大加快了页面加载速度。

jsmcc after

如果需要,我们也可以点击页面底部的 flash 按钮以显示所有 flash 。

jsmcc flash

代理调度展示

由于国情,熟练应用代理已经成为在国内冲浪的基本功了,但是你可能已经开始厌倦了频繁的切换代理,然而通过 Proxomitron ,我们可以将这一切自动化。

以下代码,展示了如何针对不同网站自动使用不同代理:

## use specific proxy   $SET(0=i_proxy:3.) $SETPROXY(myproxy)
## ----------------------------------------------------------------------------
[^/]++.blogspot.com/    $SET(0=i_proxy:3.) $SETPROXY(web.proxy.one:80/cgi-bin/proxy.cgi/)
feeds.gawker.com/       $SET(0=i_proxy:3.) $SETPROXY(web.proxy.two:80/phpproxy/)
feeds.feedburner.com/   $SET(0=i_proxy:3.) $SETPROXY(111.111.111.111:8080)
my.opera.com/           $SET(0=i_proxy:3.) $SETPROXY(127.0.0.1:8567)

伪造 Referrer 破解防盗链展示

防盗链的一种方法是检查 referrer 。也许有人还记得几个月前 sina 和 sohu 博客的防盗链措施,使得我们在 google reader 等在线 rss 阅读器中无法显示博客图片的问题(目前正常了)。凭借 Proxomitron 超强的 http header 过滤功能,可以让我们轻松突破此限制。

以下代码可以让浏览器在访问以 pic.hosting.server/directory/pic 开头的链结时,自动修改 referrer 为 pic.hosting.server。

## fake referrer                    $SET(0=f_refer.) $SET(sReferF=*)
## ----------------------------------------------------------------------------
pic.hosting.server/directory/pic    $SET(0=f_refer.) $SET(sReferF=pic.hosting.server)

以下配置可以使 Google 默认使用英语,并显示 100 个搜索结果。

# Google preferences
# -----------------------------------------------------------------------------

# ID -> shared GUID, Filters -> off, Results -> 100, Country-Region -> en/us
#
# To have Google pages displayed in another language, append ":LD=MY_LANG" just
# after ":NR=100:CR=2".  "MY_LANG" would be "fr" for French, "de" for German,
# etc..  To show e.g. 25 results per page instead of 100, replace "NR=100" with
# "NR=25".
#
# If you change any fields here, you'd need to change the complementary entries
# in the "Google" section of IncludeExclude.ptxt as well.
#
PREF\=ID\=(^3003added)[^:;]+
  (([^;:]+)\8$SET(b=$GET(b)\8):(FF|NR|CR)=[^:;]+)+
  $SET(a=$GET(a)\0\1PREF=ID=3003added0032123:FF=4:NR=100:CR=2$GET(b))$SET(b=)

sourceforge.net 的 cookie 不在我浏览器的 cookie 允许列表里,偶尔去那里下载东西,总是会根据我的地理位置自动选择日本或台湾的服务器,但实际下载速度很慢。以下代码会默认选择北美的一个服务器。

## fake cookies            $SET(0=f_cookie.) $SET(sCookieF=*)
## ----------------------------------------------------------------------------
# sourceforge.net: set preferred_mirror=internap
[^/]++.sourceforge.net/         $SET(0=f_cookie.) $SET(sCookieF=preferred_mirror=internap)

网页快照

google.cn 最近恢复了网页快照功能。在此之前,我们可以使用 Proxomitron 自行添加此功能。 Proxomitron 代码如下:

[Patterns]
Name = "Add Cached Links to Google.cn 2007.09.02 [phoenix]"
Active = TRUE
URL = "$TYPE(htm)(www.|)google.cn/"
Bounds = "<a\s*</a>"
Limit = 256
Match = "(*related:\1"*)\2"
Replace = "<a class=fl href="http://www.google.cn/search?q=cache:\1" target=_blank>&#24555;&#29031;</a> - \2"

google cache

Flickr 穿墙术

GFW 对 Flickr 的封锁是基于 http header 中的关键字检测,因此绕过的方法很简单,将 http header 中的 flickr 域名替换为数字 IP 即可,也即将 farm1.static.flickr.com 替换为 68.142.213.135,将 farm2.static.flickr.com 替换为 69.147.123.56。顺便说下为什么不使用 hosts 文件来实现域名到 ip 地址的转换,因为使用 hosts 文件并不会改变 http header。 Proxomitron 的实现代码为:

[HTTP headers]
In = FALSE
Out = TRUE
Key = "Host: Flickr Farm AntiBlock 07.07.09 [phoenix] (out)"
Match = "farm1.static.flickr.com$SET(0=68.142.213.135) | farm2.static.flickr.com$SET(0=69.147.123.56)"
Replace = "\0"

http://www.flickr.com/explore 为例,使用规则前,所有链接到 farm1 或 farm2 的图片都被屏蔽了:

flickr before

使用规则后,美丽的照片得以重见天日:

flick after

以上只是 Proxomitron 应用的一小部分,谨以此文希望能吸引更多的人来关注、研究这个如此优秀却被人冷落的软件。无论你是想立刻体验 Proxomitron 的强大功能,还是想更深入了解 Proxomitron 的运作原理并自行编写规则,Proxomitronsidki的规则包 都是你最佳的起点。