仓库源文站点原文


layout: post title: 使用CF Workers Cron触发器进行签到

tags: [Javascript, Cloudflare, cron, workers]

Github Actions(×),Cloudflare Workers(√)<!--more-->

起因

前几天,我的云·原神签到脚本被Github Ban掉了,其实我非常能理解这种情况,实际上用Actions做签到确实太重了。毕竟启动一个Actions需要的资源还算比较多,相当于开一个Docker容器,然而实际上做的事情却是很简单的请求一个接口罢了。而专业的全自动签到者有更专业的选择,比如QianDao,可以挂很多签到脚本,而且操作非常简单,只是需要服务器……而我为了能保证优质的签到水平,用这种东西显然还是不够稳当,服务器还会到期呢,所以像这种简单的事情我觉得还是应该用Cloudflare Workers来做更好。

使用Cloudflare Workers Cron触发器

其实有一说一,我的Javascript并不怎么样,不过至少文档我还是能看懂的,Workers进行网络请求不需要用XHR这样奇怪的东西,我感觉它应该是基于Node.js的,看了一眼是用fetch函数去进行网络请求的 (……又不是没用过,以前不还拿Workers写反代嘛……) 另外又看了看Cron触发器的文档,然后根据之前那个Python版,因为懒得分析哪些请求有用没用了,反正就三个都弄上吧……最终总算是知道怎么写了。于是代码如下:

addEventListener('scheduled', event => {
  event.waitUntil(
    handleSchedule(event.scheduledTime)
  )
})

async function handleSchedule(scheduledDate) {
  const init = {
    headers: {
      'x-rpc-combo_token': '填入Token',
      'x-rpc-client_type': '2',
      'x-rpc-app_version': '3.4.0',
      'x-rpc-sys_version': '11',
      'x-rpc-channel': 'mihoyo',
      'x-rpc-device_id': '填入设备ID',
      'x-rpc-device_name': '填入手机名称',
      'x-rpc-device_model': '填入手机型号',
      'x-rpc-app_id': '1953439974',
      'Referer': 'https://app.mihoyo.com',
      'Host': 'api-cloudgame.mihoyo.com',
      'Connection': 'Keep-Alive',
      'Accept-Encoding': 'gzip',
      'User-Agent': 'okhttp/4.9.0'
    },
  };
  console.log(scheduledDate);
  console.log(await fetch("https://api-cloudgame.mihoyo.com/hk4e_cg_cn/wallet/wallet/get", init));
  console.log(await fetch("https://api-cloudgame.mihoyo.com/hk4e_cg_cn/gamer/api/getAnnouncementInfo", init));
  console.log(await fetch("https://api-cloudgame.mihoyo.com/hk4e_cg_cn/gamer/api/listNotifications?status=NotificationStatusUnread&type=NotificationTypePopup&is_sort=true", init));
}

至于怎么获取Token之类的参数,用HttpCanary之类的抓包就好了,不过要先启动云·原神之后再抓包,不然程序貌似会检验SSL证书是不是合法的,然后就退出登录了……抓到之后随便点开一个请求里面就有上面的值了,根据情况填到上面就行了。
还有Workers的配置就很简单了,把代码粘到Workers里面之后在触发器里面的“Cron 触发器”中设定时间就行了,一般就一天一次,反正它能自动生成Cron表达式,也不用自己写,要不写“0 0 *”也行,然后就什么都不用做了。

感想

写完这个签到脚本之后,我觉得应该鼓励大家都去使用Workers这种方法去进行签到,Cloudflare可不会因为这种东西去Ban你的东西,至于Actions应该更多用于更需要计算资源的事情,比如编译代码啊,或者生成静态HTML还是日报之类的,签到啥的确实是太浪费了(而且还会Ban)。
还有就是云函数啥的……不过那个貌似本质来说还是Docker,它运行时是一个完整的环境,不像Workers那样应该是运行在一个更加轻量的沙箱里的,也许还更环保呢XD。