Repository navigation
v1.1.11
这一版把流媒体探测判据里四处会给出错值的地方修掉了。它们的共同点是:结论看起来很正常,但它是错的。
读不到标记。 YouTube 的解锁标记 ad-free 出现在页面的第 815,530 字节,而读取上限是 512 KB,所以那三个标记一个都读不到,判据永远给出"没读明白"。现在这个服务有自己的上限,并且读够了就收手;在真实页面上实测,读到第 819,200 字节就能定案。
把正文里的一个字符串当成了凭据。 旧的"中国版"判据是"响应正文里出现 www.google.cn"。而在生产那台位于美国的机器上,面板显示"中国区",正文里那个字符串却出现 0 次——同一页的 ad-free 在 815,530 字节处,它其实是一页正常的解锁页。现在这一档改由最终落在哪个主机判定,也就是"我们被跳到了哪里"这个可复核的事实;notgoogle.cn 与 google.cn.evil.example 这两种会被子串匹配误伤的情况有测试钉住。
相对跳转被当成了错误。 primevideo.com 的 302 给出的目标是一个相对路径,而取页代码只接受以 https:// 开头的绝对地址,遇到相对路径直接判死,于是这个服务整个取不到页。现在三种相对形式都会正确拼接,而"只跟 https"这条安全规则没有放松。
一次异常响应被记成了结论。 限流页、机器人页和网关错误页都是 200,正文很小,里面当然也没有我们要找的标记,于是判据会得出"未解锁",甚至"解锁"。现在有一道按实测选出的地板(8 KB:真实页面在 506 KB 到 944 KB 之间,一次限流的正文是 521 字节),明显不可能是产品页的响应一律判"没读明白"。同时补上三处出口:Netflix 不再把两个小页面读成"解锁";TikTok 去掉那个并不存在的"被墙"档(参考实现这一档是"失败",而它唯一给出"屏蔽"的分支是死代码);ChatGPT 补上"没读明白"这个出口——旧的写法是只要有一边请求不到就整条都不上报,面板上因此一片空白。这道地板只用于 HTML 页面,JSON 接口正常就只回几十个字节,不能拿页面尺度去量它。
改动让十条旧测试变红,逐条判断了原因:八条是夹具写得太小(那些测试本意是测判据,夹具却写成了几个字节的串),一条是语义该跟着改,还有一条抓住了新加助手的一个漏洞——把空正文补成页面尺度之后,判据会把它读成"两个正常页面"并判为解锁,而"正文是空的"是一个独立情形。