众所周知,Pixiv 在大陆被墙,并且图片服务器域名 i.pximg.net
有盗链保护,只要 Referer
不是来自 Pixiv 的请求都会返回 403。那么,如何才能在大陆地区直接访问图片资源?
为什么要代理图片?
p 站都被墙了这么多年,既然都准备走反代了,为什么还要单独对图片?直接搭建反代站不是更好么?
首先,反代站可能会导致 P 站发邮件到您的主机商投诉,甚至还会导致 VPS 服务等被终止。其次是我当初只是想简单给群里做一个涩图机器人,没有特别复杂的使用场景(
类似例如 lolicon、acgmx 等许多基于 p 站的涩图 API,返回的都是 Pixiv 官方图片链接,并不能直接访问,所以便有了单独针对图片代理的需求。
第三方代理
若不会自己搭建,也可以直接使用第三方服务。pixiv.cat 就是一个专门用于 p 站图片代理的站点,甚至能直接通过图片 id 请求获取插画。
我最初也是使用的该服务,不过后续因主域名在大陆被墙,导致服务全挂掉了(我当时还以为是机器人坏了,排查了近十分钟才发现是代理的问题),便有了自建的想法。
反向代理
如果你有自己的服务器,可以使用 nginx 进行代理。
1 | proxy_cache_path /path/to/cache levels=1:2 keys_zone=pximg:10m max_size=10g inactive=7d use_temp_path=off; |
没有服务器也没关系,可以利用 Cloudflare 的 Workers 白嫖,每日免费提供 10 万次请求,完全满足日常使用。总不至于不够用吧?别冲了,人要冲死了。
1 | export default { |
你如果看过其它提供反向代理的教程,可能已经发现了,我写的 Workers 代码与别人贴的不太一样。这是因为 Workers 已经不推荐使用 commonjs 模块了,官方文档的示例代码也已经全部更改为了 esm。
1 | addEventListener('fetch', event => { |
这种写法其实也可以,但它已经过时了,所以我并不推荐。
我要色色!
配置相关 DNS 解析后,就可以直接通过 URL 直接访问 p 站图片了。
Pixiv 网站上的原始链接(直接打开或在其他网站使用会返回 403):
https://i.pximg.net/img-master/img/2021/06/10/18/09/04/90457556_p0_master1200.jpg
反向代理(i.yuki.sh)(能正常访问):
https://i.yuki.sh/img-master/img/2021/06/10/18/09/04/90457556_p0_master1200.jpg
嘛,如果你看完文章还是嫌麻烦,也可以直接把 i.yuki.sh
拿去用,给个 blog 点个 star 就行了(笑)
罗翔说法
张三在网上,用别人提供的 API 服务,居然在 QQ 群里发 R18 的图片,请问张三这一行为触犯了哪项法律?
技术虽无罪,但还是提醒一下,发送的图片请务必遵守你所在国家及其地区的法律法规,别被请喝茶了。
2022-10-03
出于几个月前发生的事情(关注 p 站的应该都知道,有人用别人搭建的反代服务盈利),特别强调一下,本来就靠爱发电,某些人别把开源环境弄得越来越恶臭。
2023-12-16
这个周末,我还是和往常一样,惬意地吹着暖气,打着 gal。就在这时,我突然收到了一封来自服务商的邮件,不看不知道,一看吓一跳,我的反代服务突然出现了大量的请求。
是被 ddos 了?咱平时也没做坏事呀… 带着这个疑问,我立即查看了后台数据,看到 7/s 的访问频率已经持续了一个小时。这么低的频率看来并不是被恶意攻击了,而且 ip 也没发现异常,这让我松了一口气。为了保证 api 能够正常使用,我立马将服务做了升级,随后继续打着黄油。
万万没想到,这种状况一直持续了近 24 小时。起初我其实并不介意,有人能用我的代理服务是一件很开心的事情,因为我做的东西帮到了他人。不过在好奇心的驱使下(到底是谁能冲这么久),我去看了眼日志,当时血压就上来了,喵了个咪的居然一直在请求 R18 的图片。
我立即制作了这张图片,用作 api 的固定返回结果,并要求当事人与我取得联系。
说实话,我从没这么生气过,用着别人的代理服务一直发 R18 的图片,一天请求了百万次都是小事,但是 ip 全部来自国内,这是一件很自豪的事情么?关注 gal 圈的应该都知道,上个月就是因为发生了类似的事件,导致站长受了牵连。
直到今天,当事人也没有与我取得联系,在群友的帮助下,我大概了解到了事情的经过。起因是一个链接在各大 QQ 群疯传,专门用来获取 R18 图片,而那个 api 正是使用了我的代理服务。当时我正在气头上,准备去找当事人理论理论,点进 blog 一看… 嗯,年纪挺小的一小孩,好像也就没那么生气了。毕竟不知者无罪,也难怪胆子那么大,这件事也算是给我自己起到了一个警示。