通過Fiddler抓包保存網(wǎng)頁上的視頻(Bilibili)
本文僅供學(xué)習(xí)交流用途
文中出現(xiàn)的信息僅為演示需要
請勿以任何方法剽竊、盜用任何視頻作者的任何視頻
有時候遇到一些素材想保存下來,但是網(wǎng)站不給保存,無論視頻是否允許轉(zhuǎn)載。這篇介紹一下最近發(fā)現(xiàn)的一個保存視頻的方法。
不會介紹Fiddler了,百度有。
這邊用我自己發(fā)的一個視頻來做示范:演示視頻 (https://www.bilibili.com/video/BV1WU4y1R7pG)
會用到的軟件:fiddler https://www.telerik.com/download/fiddler
ffmpeg https://github.com/BtbN/FFmpeg-Builds/releases
ffmpeg無安裝包,需要使用絕對路徑執(zhí)行或配置好環(huán)境變量再執(zhí)行。
抓包:
1. 配置好Fiddler:需要開啟Stream支持和Https解碼。


2. 打開網(wǎng)頁,開始抓包。在視頻開始緩沖的時候就可以暫停視頻了,免得抓的包太多眼花繚亂。


3. 找到需要的數(shù)據(jù)包。b站的視頻和音頻是分開儲存的,并且分段傳輸,所以大概會看到好些個Content-Type為octet-stream和mp4的包,這邊隨便選取兩個。octet-stream為音頻流,mp4為視頻流。
抓了隨機(jī)幾個視頻,有時候會全是video/mp4類型的包,所以用content-type區(qū)分音頻和視頻不可靠。目前可以通過文件名:Bilibili的文件命名是 視頻id-1-30***.m4s,其中300**為30032時是視頻文件,為30216時為音頻文件。猜測對于其它類型的視頻,比如hdr,這個值有可能會不一樣。


4.在兩個包的raw數(shù)據(jù)中將get請求的url記錄下來,順便把視頻的播放地址,也就是比如在這個示范中,是https://www.bilibili.com/video/BV1WU4y1R7pG/?spm_id_from=333.999.0.0。


那么到現(xiàn)在為止,我們已經(jīng)得到了需要的url了,接下來關(guān)掉播放頁,免得等會攔截請求的時候攔到一堆不相干的包。此時我們有三個記錄,分別是視頻流的url、音頻流的url和視頻播放的url。如果直接訪問視頻和音頻的url,是會返回403的,因為網(wǎng)站配置了防盜鏈。接著是攔截請求并寫入Refere來偽裝b站播放器。


攔截并修改Http請求:
cls清空記錄,并設(shè)置全局?jǐn)帱c(diǎn)為Before Requests模式。


訪問視頻流的url,這個時候如果有http tunnel包記得直接放過去,這不是要修改的包。

修改host對應(yīng)為視頻url的那個請求:在http請求頭中添加 Referer: 視頻播放的url,以這個為例,添加
接著點(diǎn)擊Run to Complete釋放請求。再回到瀏覽器這邊,應(yīng)該是能接收到視頻了的。



重點(diǎn)來了,由于是分段傳輸?shù)囊曨l,這個時候直接右鍵保存視頻是沒法正常保存的。需要等視頻緩沖完全,也就是視頻全部傳輸?shù)奖镜睾笤儆益I保存。期間不要釋放斷點(diǎn),后續(xù)的包均需要修改Referer。


全部緩沖完畢后就能右鍵保存視頻了。
保存音頻的方法和這個一樣,不過音頻貌似不用等緩沖完就能直接保存。

合并:
保存好兩個文件之后可以檢查是否能正常播放。

檢查完后準(zhǔn)備合并視頻。
首先將m4s擴(kuò)展名改為mp4(對。m4s都改成mp4,音頻的也改成mp4),接著需要安裝一個叫ffmpeg的命令行工具,安裝后在命令行執(zhí)行(記得切換運(yùn)行目錄):ffmpeg -i 第一個文件 -i 第二個文件 -vcodec copy -acodec copy 輸出文件(文件均需要帶擴(kuò)展名)
不出意外的話視頻會被合并起來并放在同一個目錄下,此時是一個完整的視頻了,也就是真正的保存完畢。
本文結(jié)束,感謝閱讀。

題外:Mozilla Firefox或者基于這個瀏覽器的(比如Comodo IceDragon)抓包的時候可能會出現(xiàn)這種非常奇怪的包,大概幾秒一次,請求host為detectportal.firefox.com

去about:config里面把network.captive-portal-service.enabled的值改成disabled就好了
