李威 さぽている

          小說(shuō)翻譯,日語(yǔ)相關(guān)轉(zhuǎn)移至http://blog.hjenglish.com/liwei

          如何破掉防盜鏈機(jī)制

          今天遇到一個(gè)問(wèn)題,寫(xiě)了一個(gè)頁(yè)面,抓取其他某站點(diǎn)的內(nèi)容,然后重組成新的頁(yè)面,主要是一個(gè)圖片的展示(gallery)。

          但是該站點(diǎn)做了防盜鏈,圖片無(wú)法顯示,403.

          這種盜鏈主要是靠Referer來(lái)實(shí)現(xiàn)的,也就是說(shuō)更改了Referer就能顯示圖片,但Referer不是在頁(yè)面編碼能解決的。

          Referer是瀏覽器發(fā)出的,只能更改瀏覽器才能更改Referer。

          firefox有一個(gè)插件refcontrol,可以做到這一點(diǎn),不過(guò)不是我要說(shuō)的

          繼續(xù)研究,該站提供一種embed功能,供其他頁(yè)面調(diào)用,此時(shí)就能允許其他站點(diǎn)直接顯示圖片。
          一般網(wǎng)站是不提供這種功能的,所以下面方法并不是所有網(wǎng)站適用的。

          通過(guò)對(duì)比header內(nèi)容,最終知道是它在cookie里設(shè)定了一個(gè)字段,以此來(lái)判別。

          那么,只要我設(shè)定該值即可。
          兩種方法
          1.服務(wù)器端設(shè)定set-cookie,試驗(yàn)證明,此法不可行,主要是domain無(wú)法更改到對(duì)應(yīng)站點(diǎn)的domain下
          2.客戶端用javascript設(shè)定document.cookie。仍不行……,原因不明,大概也是無(wú)法改domain吧

          這下只剩最后一招了,在我的頁(yè)面里直接調(diào)用embed頁(yè)面,讓它替我設(shè)cookie,如何調(diào)用呢?
          首先想到用frame,試了下,frame和圖片幾乎同時(shí)發(fā)出request,這樣cookie還沒(méi)設(shè)定,請(qǐng)求圖片肯定403.
          又想到onload,呃,是在body完了后才調(diào)用,肯定不行
          后來(lái)看到,html的head里的文件先下載完畢后,再請(qǐng)求圖片。這點(diǎn)我以前也提到過(guò),javascript代碼的執(zhí)行順序 
          head里主要有2種文件調(diào)用,js和css。
          這里就不是什么正規(guī)寫(xiě)法了,因?yàn)閑mbed頁(yè)面既不是js文件,也不是css文件,但瀏覽器是不會(huì)管這個(gè)的,直接調(diào)用。
          一般也不會(huì)這么用……旁門(mén)左道
          先用了js這種,在src里寫(xiě)上embed頁(yè)面地址,可以顯示圖片,但有個(gè)javascript錯(cuò)誤。
          接著改進(jìn),用css的,會(huì)發(fā)現(xiàn)最終調(diào)用了兩次,一次是在開(kāi)始,還有一次是在所有其他head文件全下載完之后
          有些小影響,但問(wèn)題不大。

          時(shí)間比較晚,就懶得加上試驗(yàn)代碼,OK,就這樣,完工。

          posted on 2010-08-10 00:19 李威 閱讀(843) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宁远县| 郁南县| 吉首市| 惠来县| 磐安县| 松阳县| 普定县| 凤山县| 甘泉县| 南乐县| 嘉兴市| 浮山县| 察隅县| 华安县| 泽普县| 金溪县| 盐津县| 定兴县| 桂阳县| 金沙县| 江华| 灵寿县| 上栗县| 石首市| 白朗县| 都兰县| 正阳县| 龙川县| 灌阳县| 玛多县| 本溪| 探索| 朝阳区| 时尚| 乌拉特前旗| 绥化市| 平乡县| 中山市| 阿巴嘎旗| 佳木斯市| 怀柔区|