在网页向您提供其文件之前必须发生什么
你可以看视频。它正在网络浏览器中播放。那么为什么没有办法保留呢?答案是网页很少交出文件——它交出指令,而浏览器根据指令组装的文件可能根本不作为一个单独的东西存在。
FoxDL 页面提供视频的四种方式,其中只有一种是文件
最古老和最简单的是直接文件:页面指向以“.mp4”结尾的地址,浏览器会获取它。如果您能找到该地址,则您拥有该文件。这仍然是大多数小型网站、论坛、新闻媒体和文件托管商的工作方式。
第二个是自适应流式传输 — HLS 或 DASH。该页面加载一个播放列表,其中列出了数百个不同质量级别的短片段,播放器将它们拼接在一起,并在连接发生变化时切换质量。没有找到任何单个文件。保存它意味着获取每个段并从中重建文件。
第三个是 blob URL。该页面已经使用 JavaScript 获取了数据,并向玩家提供了对浏览器自身内存中某些内容的引用。您可以看到的地址(“blob:https://…”)在该页面和该会话之外是没有意义的 - 它无法打开、共享或下载,这会让大多数天真的“视频查找器”陷入困境。
第四个是受保护的内容:通过 DRM 系统播放的加密片段,其中解密密钥在明确禁止保留副本的条件下发布给浏览器。这不是一个需要解决的障碍;这是许可协议所建立的机制,没有任何合法工具可以击败它。
Web 浏览器如何注意到有需要保存的内容
一个可以保存所发现内容的应用内网络浏览器可以同时执行多项工作。每个人都抓住了其他人错过的案件。
- 读取页面的媒体元素
- 遍历文档中的“<video>”、“<audio>”和“<source>”标签并读取它们的地址。立即捕获直接文件情况,错过页面加载后由 JavaScript 构建的所有内容。
- 观察 Shadow DOM 内部
- 现代播放器是自定义元素,其内部结构被故意与页面隔离。在普通文档处停止的搜索会看到视频所在的空框。
- 查看页面实际请求的内容
- 浏览器知道页面获取的每个资源。加载的媒体文件(无论哪个脚本或何时请求它)都会显示在此处,即使可见页面中没有任何内容指向它。
- 嗅探响应类型
- 以“.php”结尾的 URL 可以返回视频,以“.mp4”结尾的 URL 可以返回错误页面。服务器实际发送的“Content-Type”会告诉您哪些扩展名是猜测。
页面保存工作时是什么样子的
顺序很重要。大多数失败是由于跳过第二步并启动登录页面的 4 GB 传输。
-
首先播放第二个媒体
许多页面在播放开始之前不会加载任何内容。播放两秒钟通常就是空候选列表和完整候选列表之间的区别。
-
检查候选人的实际情况
在提交之前,请查看报告的大小和类型。 14 KB 的“电影”是一个 HTML 页面。如果您期望的是“video/mp4”,而“text/html”类型则意味着您的链接有误。
-
选择您想要的品质
一个流通常提供多个流。在手机上,最高的并不总是正确的答案,因为手机上的差异是看不见的,而存储却是看不见的。
-
让会议继续下去
受保护的链接会检查谁在询问:来自您登录会话的 cookie、引荐您的页面,有时还包括浏览器身份。即使页面运行良好,在没有这些的情况下开始下载也会得到 403。
-
验证什么着陆了
打开它。播放两秒然后停止的文件被截断(通常是过期的链接),值得重新启动而不是保留。
应用内网络浏览器必须满足哪些要求
除了查找媒体之外,这些因素还决定了下载是否真正完成。
- 将会话进行至下载
Cookie、引用者和用户代理必须随请求一起传送。如果没有它们,受保护的链接将在页面中解析并在下载器中失败。
- 不存储这些凭证
在会话期间,会话 cookie 与密码一样有效。它们在传输期间属于内存,而不是其他地方——不在数据库中,不在日志中。
- 拒绝将链接交给其他应用程序
如果 iOS 声称拥有该域名,它会很乐意在另一个应用程序中打开点击的链接。用于保存媒体的网络浏览器必须取消并重新发出导航本身,否则您想要的页面就会消失在其他人的应用程序中。
- 在渲染之前修剪页面
内容拦截器不仅仅是在这里做广告——更少的跟踪器和覆盖意味着媒体列表中更少的虚假候选者。
- 处理文档和视频
PDF、ZIP 和 Office 文件是人们从网络上保存的文件的另一半,它们应该与其他文件一样存放在同一个库中。
人们提出的问题
为什么 Safari 不能自己做到这一点?
Safari 确实会下载文件——自 iOS 13 起就开始了。它不会检查页面中是否有正在流式传输而不是链接的媒体,或者将分段流重建为文件。它是一个网络浏览器,而该作品属于下载管理器。
什么是 blob URL?为什么我无法下载它?
它是页面已保存在内存中的数据的句柄。它在该选项卡之外不存在,因此将其粘贴到任何地方都不会产生任何结果。底层媒体是从真实的某个地方获取的,并且该地址(而不是 blob)才是值得查找的地址。
页面运行正常,但下载时出现 403。为什么?
下载请求到达时没有页面所拥有的内容:您的会话 cookie、引用页面,有时还包括匹配的浏览器身份。服务器正是使用这种组合来区分查看者和抓取者。
一切都可以挽救吗?
不,这是设计使然。受 DRM 保护的内容使用根据禁止保留该内容的许可证颁发的密钥进行加密。有些网站还使用短期令牌单独签署每个分段。两者都按预期工作。
FoxDL 内的网络浏览器
它是一个普通的选项卡式网络浏览器,其工作是将内容放入您的库中,而不是作为您的日常浏览器。
- 六个检测通道,包括shadow DOM和页面实际请求内容的记录,因此完全用JavaScript构建的播放器仍然可见。
- 真实类型是从响应中嗅探,而不是从扩展中猜测,并且无法获取的“blob:”候选者将被过滤掉,而不是被提供并失败。
- Cookie、Referer 和用户代理会被带入下载,以便解析受保护的链接 — 并且它们都不会写入磁盘。
- 内容拦截器会在渲染之前修剪页面。
- PDF、ZIP 和文档 一键保存到与媒体相同的库中。
- 您自己的快捷方式的选项卡、书签和起始页。
FoxDL 不提供自己的内容。你保存的就是你带来的,你有责任拥有保留它的权利。