解决IOS端少数派RSS图片加载失败问题
文章目录
前言
一直使用 TTRSS 配合全文抓取插件阅读 「少数派」 上的文章,不知何时开始,抓取全文中的图片都会加载失败,而跳转到少数派的官网则没有问题。
网上也能搜到一些类似的反馈,是「少数派」开启图片防盗链功能导致的。一般的图片防盗链功能是通过检测 HTTP 请求头中的 Referer
字段是否是合法的域名实现的。
TTRSS 在 HTML 中会对图片链接增加 referrerpolicy="no-referrer"
属性,这个属性会在请求图片时不发送任何 Referer
信息,进而被少数派拒绝返回图片。
解法
解法也比较简单,TTRSS 有一个 af_refspoof
插件,开启这个插件并将少数派的 RSS 源添加到插件配置中。
此时可以看到图片的链接被插件拦截,之后就能正确请求并显示图片了。
更进一步
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 打开少数派的文章,就可以正常显示图片了😁。