一种特殊情况下的优酷广告过滤

最近在看优酷上的电视剧,烦了那个广告,于是想到过滤,一般来说,过滤优酷的广告,网上都有现成的方法,思路是改 hosts 干扰域名解析,这是屏蔽广告的常见思路,而且比较通用,另外,对付优酷的特殊情况,他会使用 flash 判断广告的播放情况,如果没有播放成功,那么会给一个提示,所以需要修改 flash 的一些相关文件,具体的是修改

C:UsersZRJAppDataRoamingMacromediaFlash Player#SharedObjectsBGTENWSR

下面的一个 static.youku.com 文件夹,删掉然后用一个 com 文件占用位置,让其无法写入,于是这个问题也得以解决。

但是我这里的情况稍稍不同,由于处在校内网,所以出入口速度比较慢,刚好知道有一个直连 Internet 的代理服务器,于是对于一些大的流媒体文件,我一般走这个代理去下载,速度还是比较快的,代理的切换方法的话,我是用 chrome 下的 Proxy SwitchySharp,还比较好用,可以自定义规则来控制代理,这个东西一般是用来做本地 goagent 配合着用的,对于被墙的域名走本地搭起的 goagent 代理,对于普通域名走直接连接的通道。

同时他还有一个手动切换的选项,我一般在遇到流媒体的时候会手动切换到那台代理,问题就出在这里:当我们把优酷负责广告的域名通过 hosts 干扰了解析之后,正常情况下是可以奏效的,但是,如果这个时候走代理,那么本地修改的 hosts 就鞭长莫及了。我觉得这是因为他的处理流程导致的:首先当 chrome 有一个 HTTP 请求的时候,被 SwitchySharp 拦截,这个时候,如果 SwitchySharp 在匹配列表中没有发现可以匹配的规则的话,那么就放行,然后 chrome 继续处理请求的流程,这里才发起解析域名的步骤,于是 hosts 才有用,相反,如果 SwitchySharp 能匹配到规则的话,就直接把请求转发到代理去了,于是本地的 hosts 根本就不会被访问,悲剧就这么发生了。

本地 hosts 修改没用的话,那么怎么办呢,沿用这个思路,很快的可以想到,既然如此,我们可以起一个根本不存在的代理,就用本地 127.0.0.1 的地址,来接受那些广告域名,然后配置 SwitchySharp ,让他把所有的广告请求都转到这个不存在的代理,然后正常的视频就从可用的代理那里请求数据。

可惜后面跟着还有问题,问题在于,对于真正的视频文件,优酷并没有使用一个域名来提供内容,而是使用一个类似

http://f.youku.com/player/getFlvPath/sid/134329032214611466521_00/st/flv/fileid/0300020A004FDF4C44FD8A032DBBC7F1B1B40B-AC36-FF2F-113A-10996097DEBD?start=1&K=c1a370c934fd64c2241114b0&hd=0&myp=0&ts=406&ymovie=1

的地址来回应一个 302 到一个 IP 命名的服务器上来提供,估计是 CDN 吧,这样的话,想要使用一个通配的 URL 规则来匹配这些视频就没用了,因为就算那个 f.youku.com 域名下的请求是通过代理得到的,也帮不了什么忙,那只是一个 302 而已,回想之前为什么没有这样的问题呢,因为当时我是把全局的请求都通过可用代理去取内容的,所以根本都不需要关心这些细节。

于是最后就只能配置成:广告域名的请求走一个本地的空白代理,其他的所有请求走可用代理,然后在看完视频后,再把那条规则暂时屏蔽掉。

Leave a Reply

Your email address will not be published. Required fields are marked *