前言

一直使用 TTRSS 配合全文抓取插件阅读 「少数派」 上的文章,不知何时开始,抓取全文中的图片都会加载失败,而跳转到少数派的官网则没有问题。

网上也能搜到一些类似的反馈,是「少数派」开启图片防盗链功能导致的。一般的图片防盗链功能是通过检测 HTTP 请求头中的 Referer 字段是否是合法的域名实现的。

TTRSS 在 HTML 中会对图片链接增加 referrerpolicy="no-referrer" 属性,这个属性会在请求图片时不发送任何 Referer 信息,进而被少数派拒绝返回图片。

3oLUnf

NxCKwl

解法

解法也比较简单,TTRSS 有一个 af_refspoof 插件,开启这个插件并将少数派的 RSS 源添加到插件配置中。

MSaOwH

此时可以看到图片的链接被插件拦截,之后就能正确请求并显示图片了。

eORVDz

更进一步

af_refspoof 插件只是解决了 TTRSS WEB 端图片显示的问题,但实际上我现在很少使用 TTRSS 的 WEB 端,一直是配合 Fever 插件在手机上使用 UnRead 软件进行阅读。

而以上解法在 UnRead 软件中并不生效。

我一开始猜测是 Fever 插件返回的图片链接并未被插件拦截改写,导致 UnRead 在请求时还是没有携带 Referer 字段,必须使用原生支持 TTRSS 协议的 RSS 阅读器才能解决。因此后面我也尝试了 ReadKit、Fiery Feeds 等原生支持 TTRSS 协议的 APP,发现它们也无法正确显示图片。

这个问题使我一度不再阅读少数派的文章,但最近突发奇想,在 《去广告杂谈》 文章中提到使用 QX 等 VPN 工具拦截 HTTPS 流量实现拦截广告的功能,那么使用 QX 拦截少数派的图片请求并增加 Referer 字段岂不是也能解?

说做就做。网上关于 QX 规则的实现教程文章并不多,结合 QX 给的 Sample 配置示例以及网上其他大佬实现的规则,我测试新增实现了一个重写规则。

其中,

  • Type:request-header,表示重写请求头
  • URL To Match: ^https://cdnfile\.sspai\.com/,当匹配到域名 https://cdnfile.sspai.com/ 时执行该重写规则
  • Headers to Match:(Host:.+)(\r\n),匹配请求头中的 Host 字段
  • Replacement:$1$2Referer: sspai.com$2,将匹配到的 Host 头替换成 $1$2Referer: sspai.com$2

具体来说,当发现请求域名 cndfile.sspai.com 时,会把请求头中的 Host: cdnfile.sspai.com\r\n 替换为 Host: cdnfile.sspai.com\r\nReferer: sspai.com\r\n

一点小坑,重写规则中的 Replacement 字段并不是正则,因此直接填写换行符 \r\n 并不生效,只能在 Headers to Match 字段中单独匹配 \r\n,并在 Replacement 字段中通过 $2 的形式复用。

在添加上述重写规则后,还需要将域名 cdnfile.sspai.com 添加到 QX MitM 配置的 Hostnames 列表中,这样 QX 才会拦截 cndfile.sspai.com 域名的请求数据并能够应用该重写规则。

若无意外,再使用 UnRead 打开少数派的文章,就可以正常显示图片了😁。