使用Cloudflare Workers反带P站图片

近期一直在搞Pixiv相关的东西,也拿到了Pivision的原作者reiya的正式授权,成了新的维护者。于是一个又一个的问题摆在我面前,我必须要把她们一个一个推倒。 目前比较棘手的问题是:如何注册账号。实际上解决办法也很简单,反带P站就完事了。但这会出现另一个严重的问题:反带了P站,大量的图片会让我的小服务器吃不消。这时候,我发现了Cloudflare Workers。

简介

Cloudflare提供了免费的额度,每天10万次请求而不计算流量,简直就是用来反带的神器!

教程

1. 前提准备

  • 一个域名
  • 域名要使用Cloudflare的NS解析

2. 步骤

首先注册一个Cloudflare账号(估计大多数人都有),之后把你的域名使用Cloudflare解析(这个过程我觉得没必要详细讲了……)

然后打开你的域名管理页面,点击上面的Workers,再点击Launch Editor,进入脚本编辑器。

在编辑器中,点击左侧的Add script,之后输入脚本的名称,随便填一个pximg就好,之后点击Confirm创建脚本。

之后左侧会多出来一个脚本,点进去开始编辑。

删除掉里面所有的代码,粘贴下面的代码进去。

 1addEventListener("fetch", event => {
 2  let url = new URL(event.request.url);
 3  url.hostname = "i.pximg.net";
 4
 5  let request = new Request(url, event.request);
 6  event.respondWith(
 7    fetch(request, {
 8      headers: {
 9        'Referer': 'https://www.pixiv.net/'
10      }
11    })
12  );
13});

就像这样,然后点击save保存脚本。然后点击左上角的Dashboard返回域名面板。

之后点击Add route,填写https://你的域名/*,并且下面选择刚刚创建的脚本,举例如图。

再之后点击new Workers dashboard,根据提示创建一个二级域名。例如我的二级域名是yojigen.workers.dev,而刚刚创建的脚本的域名就是pximg.yojigen.workers.dev

最后一步,到DNS页面,添加一个CNAME记录到你的脚本域名下,并开启云加速。

至此,你就可以使用你的域名来作为Pixiv的图片反向代理了。

关于Pixiv第三方客户端无法登陆问题

现在不能文中所述的固定值了,必须要计算真实时间

昨日听闻Pixiv的API接口升级,大部分第三方的APP都无法登陆了,之后也是一直在找解决方案,最后在Mikusa的博客里面发现了这个 Iuuses ,并在里面找到了解决方案。

解决方案

Pixiv这次接口更新主要是在Header中加入了两个字段。 一个是X-Client-Time,内容为RFC3339格式的时间戳,类似

13000-01-01T00:00:00+00:00

另一个字段是X-Client-Hash,内容为X-Client-Time的内容加上

128c1fdd170a5204386cb1313c7077b34f83e4aaf4aa829ce78c231e05b0bae2c

之后再进行MD5编码

众所周知MD5是校验编码,无法还原为原始数据,所以因此可以推测服务器没有办法判断当前的数据是否合法,因此只要写死进客户端里一个规则合法的值就可以了。

最后只要在请求的Header中添加

1x-client-time: 3000-01-01T00:00:00+00:00
2x-client-hash: 93771864335ef0c8e52db10be563eab3

就可以解决问题~