在網頁交出檔案之前,必須先發生什麼事
您可以觀看影片。它正在網頁瀏覽器中播放。那為什麼沒有辦法保留呢?答案是網頁很少交出檔案——它交出指令,而瀏覽器根據指令組裝的檔案可能根本不作為一個單獨的東西存在。
FoxDL 頁面傳送影片的四種方式,其中只有一種是檔案
最古老且最簡單的是直接檔案:頁面指向以「.mp4」結尾的位址,瀏覽器會取得它。如果您能找到該地址,則您擁有該檔案。這仍然是大多數小型網站、論壇、新聞媒體和檔案託管商的工作方式。
第二個是自適應流 - HLS 或 DASH。該頁面加載一個播放列表,其中列出了數百個不同品質等級的短片段,播放器將它們拼接在一起,並在連線發生變化時切換品質。沒有找到任何單一檔案。保存它意味著獲取每個段並從中重建檔案。
第三個是 blob URL。該頁面已經使用 JavaScript 獲取了數據,並向玩家提供了對瀏覽器自身記憶體中某些內容的引用。您可以看到的地址(“blob:https://…”)在該頁面和該會話之外是沒有意義的 - 它無法打開、共享或下載,這會讓大多數天真的“影片查找器”陷入困境。
第四個是受保護的內容:透過DRM系統播放的加密片段,其中解密金鑰在明確禁止保留副本的條件下發佈到瀏覽器。這不是一個需要解決的障礙;這是許可協議所建立的機制,沒有任何合法工具可以擊敗它。
網頁瀏覽器如何注意到有東西需要保存
一個可以儲存發現內容的App內網頁瀏覽器可以同時執行多項工作。每個人都抓住了其他人錯過的案件。
- 讀取頁面的媒體元素
- 遍歷檔案中的「<video>」、「<audio>」和「<source>」標籤並讀取它們的位址。立即捕獲直接檔案情況,錯過頁面加載後由 JavaScript 構建的所有內容。
- 深入了解 Shadow DOM
- 現代播放器是自訂元素,其內部結構被故意與頁面隔離。在普通檔案處停止的搜尋會看到影片所在的空框。
- 查看頁面實際要求的內容
- 瀏覽器知道頁面取得的每個資源。載入的媒體檔案(無論哪個腳本或何時要求它)都會顯示在此處,即使可見頁面中沒有任何內容指向它。
- 嗅探回應類型
- 以“.php”結尾的 URL 可以返回影片,以“.mp4”結尾的 URL 可以返回錯誤頁面。伺服器實際發送的“Content-Type”會告訴您哪些擴展名是猜測。
從頁面儲存的效果如何
順序很重要。大多數失敗是由於跳過第二步並啟動登入頁面的 4 GB 傳輸。
-
先播放第二個媒體
許多頁面在播放開始之前不會載入任何內容。播放兩秒鐘通常就是空白候選清單和完整候選清單之間的差異。
-
檢查候選人實際上是什麼
在提交之前,請先查看報告的大小和類型。 14 KB 的「電影」是一個 HTML 頁面。如果您期望的是“video/mp4”,而“text/html”類型則表示您的連結有誤。
-
選擇您想要的品質
一個流通常提供多個。在手機上,最高的並不總是正確的答案,因為手機上的差異是看不見的,而儲存是看不見的。
-
讓會議繼續下去
受保護的連結檢查誰在詢問:來自您登入工作階段的cookie、引用您的頁面,有時還包括瀏覽器身分。即使頁面運作良好,在沒有這些的情況下開始下載也會得到 403。
-
驗證著陸內容
打開它。播放兩秒鐘然後停止的檔案被截斷(通常是過期的連結),值得重新啟動而不是保留。
App內網頁瀏覽器必須具備的條件
除了尋找媒體之外,這些因素還決定了下載是否真正完成。
- 將會話進行到下載
Cookie、引用者和使用者代理程式必須隨請求一起傳送。如果沒有它們,受保護的連結將在頁面中解析並在下載器中失敗。
- 將這些憑證保留在儲存之外
會話 cookie 與會話期間的密碼一樣有效。它們在傳輸期間屬於記憶體,而不是其他地方——不在資料庫中,不在日誌中。
- 拒絕將連結交給另一個App
如果 iOS 聲稱擁有該網域,它會很樂意在不同的App中開啟點選的連結。用於保存媒體的網頁瀏覽器必須取消並重新發出導航本身,否則您想要的頁面就會消失在其他人的App中。
- 在渲染之前修剪頁面
內容攔截器不僅僅是在這裡做廣告——更少的追蹤器和覆蓋意味著媒體列表中更少的虛假候選者。
- 處理檔案和影片
PDF、ZIP 和 Office 檔案是人們從網路上儲存的檔案的另一半,它們應該與其他所有檔案放在同一個資料庫中。
人們提出的問題
為什麼 Safari 不能自己做到這一點?
Safari 會下載檔案 - 從 iOS 13 開始就開始了。它不會檢查頁面中正在串流而不是連結的媒體,或將分段流重建到檔案中。它是一個網頁瀏覽器,而該作品屬於下載管理程式。
什麼是 blob URL?為什麼我無法下載它?
它是頁面已儲存在記憶體中的資料的句柄。它在該選項卡之外不存在,因此將其貼到任何地方都不會產生任何結果。底層媒體是從真實的某個地方取得的,而該位址(而不是 blob)才是值得尋找的位址。
頁面播放正常,但下載時出現 403。為什麼?
下載請求到達時沒有頁面所擁有的東西:您的會話cookie、引用頁面,有時還有匹配的瀏覽器身份。伺服器正是使用這種組合來區分檢視者和抓取者。
一切都能被拯救嗎?
不,這是設計使然。受 DRM 保護的內容使用根據禁止保留該內容的許可證頒發的金鑰進行加密。有些網站也使用短期令牌單獨簽署每個分段。兩者都按預期工作。
FoxDL 內的網頁瀏覽器
它是一個普通的選項卡式網頁瀏覽器,其工作是將內容放入您的庫中,而不是作為您的日常瀏覽器。
- 六個偵測通道,包括影子 DOM 和頁面實際請求內容的記錄,因此完全用 JavaScript 建構的播放器仍然可見。
- 真實類型是從回應中嗅探,而不是從擴展中猜測,並且無法獲取的“blob:”候選者將被過濾掉,而不是被提供並失敗。
- Cookie、引用網站和使用者代理程式將透過下載,以便解析受保護的連結 — 並且它們都不會寫入磁碟。
- 內容攔截器會在頁面呈現之前對其進行修剪。
- PDF、ZIP 和檔案 只需輕輕一按即可儲存到與媒體相同的庫中。
- 您自己的捷徑的選項卡、書籤和起始頁。
FoxDL 不提供自己的內容。你保存的就是你帶來的,你有責任擁有保留它的權利。