本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。
本文评论区已加入抽奖豪华套餐,详情见文末~
前言
授人以鱼不如授人以渔,我们手里存着一个抽奖的代码,倒不如想明白这玩意怎么写的
因为提桶跑路,存公司电脑上的谷歌浏览器上的抽奖代码忘了拉下来,刚好现在也攒了巨额的矿(指 1w),同时被撩拨的有点心动,可惜没有艾特的功能,只能点名批评
fetch 何方神圣
之前使用的脚本,里面模拟请求用的 fetch()
,效果类似于 ajax
异步请求数据,但 fetch()
会返回一个 promise
对象
阅读这篇博客 fetch使用的常见问题及解决办法,可以了解到,fetch()
算是 js 的新特性,意味着存在因浏览器版本较低而不被识别到的风险
附上一个通用的请求模版
fetch(url [, config]).then(function(response) {
// 初次处理,返回一个包装好的 Promise 对象,我们将它扔到 then 里面解构出 Promise 携带的值
return response.json();
}).then(function(data) {
// 在这里处理请求返回的值
console.log(data);
}).catch(function(e) {
// 在这里捕获请求出现的异常
console.log("Oops, error");
});
复制代码
抽奖请求分析
pc 上登录后,打开我们的 抽奖页面,开 f12,点开网络的选项卡,清空多余的请求数据,将请求的类型,限定为 fetch/XHR
点击抽奖后,我拿到了自己的抽奖链接 https://api.juejin.cn/growth_api/v1/lottery/draw?aid=2608&uuid=6911658697077982728
然后,我们用这个 url 去替换上面的 fetch 模版,再扔控制台跑一遍测试看下效果
喜提 404,仔细对比,发现这个请求是 POST
格式,我们添加一下配置,继续提交
提示我们未登录,那就仔细看看原来的 https 请求里的参数是怎么回事。
本来想右键链接 Replay XHR
,结果发现可以 copy 这个请求,甚至是 copy as fetch
?
那么事情就简单了,我们基于这个 fetch 的数据,加上 await
变成同步请求,在外边包装一层,一直遍历,直到请求失败。同时,我们对这个代码块用 {}
包裹起来,封闭自定义变量的作用域
效果如下
成品源码
{
let flag = true;
for (; flag;) {
await fetch("https://api.juejin.cn/growth_api/v1/lottery/draw?aid=2608&uuid=7016487434494658063", {
"headers": {
"accept": "*/*",
"accept-language": "zh-CN,zh;q=0.9",
"content-type": "application/json",
"sec-ch-ua": "\"Chromium\";v=\"94\", \"Google Chrome\";v=\"94\", \";Not A Brand\";v=\"99\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Windows\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-site"
},
"referrer": "https://juejin.cn/",
"referrerPolicy": "strict-origin-when-cross-origin",
"body": "{}",
"method": "POST",
"mode": "cors",
"credentials": "include"
}).then(function(response) {
return response.json();
}).then(data => {
if (data.err_msg == 'success') {
console.log(data.data.lottery_name);
} else {
flag = false;
}
})
}
}
复制代码
使用方式
开 f12 直接往控制台一扔就行了,谷歌浏览器支持保存为代码块,下次需要使用了,直接右键对应的脚本 run 就好了
我不确定 xdm 的 aid 和 uuid 是否通用,建议还是走一遍请求,然后手动替换掉这个 url 即可
觉得 nice 的 xdm 来评论区留言支持一下丫~
欢迎在评论区讨论,掘金官方将在掘力星计划活动结束后,在评论区抽送100份掘金周边,抽奖详情见活动文章