怎么让核酸检测结果自动刷新呢?

背景

人在上海,之前做的核酸,总觉得该出了,可是每次打开健康云 / 随申办,结果都是“待检测机构上传”,我和浦东的朋友,分别是 0.5 天 - 2 天时间出结果,等待时间很 “蕉绿”,在手机频频点击,也有点浪费生命。

要是它自动刷新结果就好了,不用我每次 —— 打开手机 - 找到微信 / 支付宝 - 打开健康云 / 随申办 - 点击查看结果。

思路

笔者早前做移动端 H5 开发的时候,有配置过 Charles 环境,也就是说 —— 我手机连上电脑的 Charles 后,手机打开每个网页,Charles 里都能看到接口的请求和返回。

基于此,就可以看到接口的 URL、请求参数(包括 headers 和 body 等我本人的个性化参数),然后写一个 nodejs 脚本去轮询不就行了么?

开动。

实现步骤

一、手机连上电脑的 Charles

手机连上电脑的 Charles 抓包,这里就简要介绍下,不详细说明了,网上搜一下教程很多。

1、电脑安装并开启 Charles ,安装电脑系统证书后,点击如图:


2、手机代理连上 Charles,按 (1)指示的配置设置代理的服务器和端口,然后浏览器打开 chls.pro/ssl 安装对应的证书并信任:

二、手机打开微信 - 健康云小程序 - 核酸检测结果,Charles 里能看到接口的请求和返回。

当然有人问用支付宝随申办行不行,我 Charles 没抓到,进入随申办结果页,请求非常多有十几个,也可能是我漏了。

而健康云应该就一两个,很快就能找到这个接口。

三、实现接口请求

1、如果你会一些 nodejs,就可以根据以上 URL、请求参数(包括 headers 和 body 等我本人的个性化参数),写代码来发起请求了。

怎么实现这里不详细说,因为最后会放完整的示例代码。

2、借助工具的做法:

这里用到了 Charles 拷贝 cUrl 命令 -> 通过 postman 将 cURL 命令转成接口连接,最后从 postman 提取出 nodejs(适用于不擅长 nodejs 请求接口 / 比较懒得去确定一个个 headers 参数的同学)。

(1)cUrl 确认能不能请求通

在 Charles 选中这个接口,右键点击 Copy cURL Request:既可将 cURL 命令命令复制到剪贴板

image.png

然后打开任意一个命令窗口,直接粘贴,然后回车:就可以看到,结果返回了。

image.png

但是 cUrl 怎么轮询我不会,这就要考虑转成 nodejs 请求代码再去轮询了。怎么实现呢,想起了 postman。

(2)cURL 命令,借用 postman,得到 nodejs 代码。

打开 postman 应用,左上角 File - Import,选择 Raw Text,将刚刚的 cCURL 命令直接粘贴进去,点击 Continue - Import。

image.png

这样,postman 链接中,请求 headers 和 body 也都有了,点击「Send」可以看到返回了:

image.png

接下来,从 postman 获取 nodejs 代码,只需要点击 </> 也就是代码,然后选择你熟悉的 Nodejs - Request:

image.png

拷贝出来,就是完整的 nodejs 代码。

四、完善 nodejs 代码(增加轮询)后运行。

创建一个文件比如叫 lunxun.js,粘贴从 postman 提取到的 nodejs 代码如下:

var request = require('request');
var options = {
  'method': 'POST',
  'url': 'https://h5.wdjky.com/gw/nad-biz-register-queryReportEncrypted',
  'headers': {
    'Host': 'h5.wdjky.com',
    'Accept': 'text/plain, */*; q=0.01',
    'timestamp': '1649245676026',
    'X-Requested-With': 'XMLHttpRequest',
    'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
    'token': 'xxxx', // xxxx 改成你自己的
    'lightAppCode': '10000',
    'Origin': 'https://h5.wdjky.com',
    'channelCode': '10039',
    // 'User-Agent': 'xxxx',  // 非必需字段(xxxx 改成你自己的,也可以不传)
    // 'Referer': 'xxxx',  // 非必需字段(xxxx 改成你自己的,也可以不传)
    'Content-Type': 'application/json; charset=utf-8',
    // 'request-id': 'xxxx',  // 非必需字段(xxxx 改成你自己的,也可以不传)
  },
  body: '{"accountId":"xxxx","publicKey":"xxxx"}'  // xxxx 改成你自己的

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

复制代码

稍加改进,比如增加轮询,最终得到:

// 注意,主要改下面这些:
var request = require('request');
var options = {
  'method': 'POST',
  'url': 'https://h5.wdjky.com/gw/nad-biz-register-queryReportEncrypted',
  'headers': {
    'Host': 'h5.wdjky.com',
    'Accept': 'text/plain, */*; q=0.01',
    'timestamp': '1649245676026',
    'X-Requested-With': 'XMLHttpRequest',
    'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
    'token': 'xxxx', // xxxx 改成你自己的
    'lightAppCode': '10000',
    'Origin': 'https://h5.wdjky.com',
    'channelCode': '10039',
    // 'User-Agent': 'xxxx',  // 非必需字段(xxxx 改成你自己的,也可以不传)
    // 'Referer': 'xxxx',  // 非必需字段(xxxx 改成你自己的,也可以不传)
    'Content-Type': 'application/json; charset=utf-8',
    // 'request-id': 'xxxx',  // 非必需字段(xxxx 改成你自己的,也可以不传)
  },
  body: '{"accountId":"xxxx","publicKey":"xxxx"}'  // xxxx 改成你自己的

};

// 重点来了 —— 轮询:
function update() {
    request(options, function (error, response) {
        if (error) return console.error(error);
        const body = JSON.parse(response.body)
        const natResult =  body.data[0].natResult
        console.log(natResult);
    });
}

setInterval(() => {
    update()
}, 2000)

复制代码

借助工具后,我发现一共 36 行代码,有 30 行都是工具给我写的。

最后就是运行它:

yarn add request && node lunxun.js

如果你喜欢用 pnpm 则是 pnpm add request && node lunxun.js 即可。

五、来看看效果

不断请求的效果:

结果出现:

小结

本文介绍了,如果让核酸检测结果自动刷新给我们自己看。主要借助了 Charles 工具来抓包健康云结果页的请求和返回,然后转成 nodejs 脚本去发请求(参数都有,熟悉 nodejs 的同学其实可以直接开写。当然也可以借助工具,本文介绍了如果借用 cURL 和 postman 获取发起接口请求的 nodejs 代码),最后增加轮询部分。

猜你喜欢

转载自juejin.im/post/7083521397330296845