FuckWall

Bilibili 直播间无法获取小心心排查

最近发现,在直播间挂机的时候无法获取小心心,而不久之前还能正常获取。

第一反应是最近安装的油猴脚本问题,尝试禁用所有脚本,依然无法获取小心心。

转而考虑是否是 uBlock 屏蔽规则的问题,尝试直接禁用 uBlock,恢复正常。但简单粗暴禁用肯定是不可取的,于是就开始了排查之路。


排查过程

  • 打开 uBlock 弹出界面,可以看到被屏蔽的请求域名。其中 data.bilibili.comlive-trace.bilibili.com 标红了,表示这两个域名下的请求都被屏蔽,优先怀疑这两个域名。 ublock-origin-popup

  • 点击灰色按钮为这两个域名创建 noop 规则,但刷新页面后发现这两个域名下的请求依然被屏蔽。

    ublock-origin-noop

  • 具体原因是,上述方法会创建两条动态规则

    live.bilibili.com data.bilibili.com * noop
    live.bilibili.com live-trace.bilibili.com * noop

    而通过 uBlock 记录器可以看到,屏蔽这两个域名的规则是来自 EasyPrivacy 的静态规则

    ublock-origin-logger

    根据 uBlock 给出的说明,noop 规则无法覆盖静态规则,所以需要将 noop 规则提升为 allow 规则。

    参见:https://github.com/fang5566/uBlock/wiki/动态过滤快速指南#noop-规则

  • 打开 uBlock 控制面板 -> 自定义动态规则,在右侧的临时规则里可以看到刚刚创建的两条规则。手动修改其中的 noopallow

    live.bilibili.com data.bilibili.com * allow
    live.bilibili.com live-trace.bilibili.com * allow
  • 刷新页面,发现已经恢复正常。

    进一步排查,定位到 https://live-trace.bilibili.com/xlive/data-interface 这个接口才是获取小心心的关键。所以将上述规则更新如下:

    live.bilibili.com https://live-trace.bilibili.com/xlive/data-interface * allow

    保存刷新,确认没有问题后将临时规则提交到永久规则。

后记

无法确认到 EasyPrivacy 添加这条规则的具体时间,曾考虑向维护方反馈移除或添加例外,但该接口的上报行为确实可以看作是隐私收集行为,所以最后还是通过添加本地规则来允许。

二〇二二十一