李威 さぽている

小说翻译,日语相关转移至http://blog.hjenglish.com/liwei

如何破掉防盗链机制

今天遇到一个问题,写了一个页面,抓取其他某站点的内容,然后重组成新的页面,主要是一个图片的展示(gallery)。

但是该站点做了防盗链,图片无法显示,403.

这种盗链主要是靠Referer来实现的,也就是说更改了Referer就能显示图片,但Referer不是在页面编码能解决的。

Referer是浏览器发出的,只能更改浏览器才能更改Referer。

firefox有一个插件refcontrol,可以做到这一点,不过不是我要说的

继续研究,该站提供一种embed功能,供其他页面调用,此时就能允许其他站点直接显示图片。
一般网站是不提供这种功能的,所以下面方法并不是所有网站适用的。

通过对比header内容,最终知道是它在cookie里设定了一个字段,以此来判别。

那么,只要我设定该值即可。
两种方法
1.服务器端设定set-cookie,试验证明,此法不可行,主要是domain无法更改到对应站点的domain下
2.客户端用javascript设定document.cookie。仍不行……,原因不明,大概也是无法改domain吧

这下只剩最后一招了,在我的页面里直接调用embed页面,让它替我设cookie,如何调用呢?
首先想到用frame,试了下,frame和图片几乎同时发出request,这样cookie还没设定,请求图片肯定403.
又想到onload,呃,是在body完了后才调用,肯定不行
后来看到,html的head里的文件先下载完毕后,再请求图片。这点我以前也提到过,javascript代码的执行顺序 
head里主要有2种文件调用,js和css。
这里就不是什么正规写法了,因为embed页面既不是js文件,也不是css文件,但浏览器是不会管这个的,直接调用。
一般也不会这么用……旁门左道
先用了js这种,在src里写上embed页面地址,可以显示图片,但有个javascript错误。
接着改进,用css的,会发现最终调用了两次,一次是在开始,还有一次是在所有其他head文件全下载完之后
有些小影响,但问题不大。

时间比较晚,就懒得加上试验代码,OK,就这样,完工。

posted on 2010-08-10 00:19 李威 阅读(838) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: