有人说程序员不懂浪漫,还有一些梗说即便是女神/男神,换行不一样也不相为谋。 更别说,有的 女生/男生 有本身喜欢的 小哥哥/小姐姐,黑咱们做为程序员不懂他们的追星乐趣。javascript
OK,咱们可能不懂追星的那份乐趣,可是若是可以让大家开心。那咱们也愿意。java
接下来,就实战演示一下,如何讨好你的追星另外一半。node
(虽然我只在安卓手机上测试过,iphone应该同理)程序员
打开Charles,用手机链接它。chrome
这个时候就能够看到这样的画面了 json
能够看到左边请求的地址来自于https,进行了加密,咱们的请求API也变成了unknown。若是咱们想要获取SSL的内容,须要给手机安装证书,获取权限。小程序
在菜单选择Help => SSL Proxying => Install Charles Root….,根据本身的设备进行选择。若是是手机,就选择第四项。如图。 数组
而后会弹出这个画面 浏览器
在手机上用chrome浏览器(系统默认浏览器可能致使识别证书,就没法安装)访问 chls.pro/ssl 便可下载证书,按照提示安装以后。就会发现,以前unknown的API变的可见啦! 服务器
以后你在手机上的每一步操做,都会在这里获得提示。
获得了咱们想要的数据以后,咱们该怎么作呢? 就拿我使用的这款小程序来讲,它的设限是每隔两分钟能够偷一次花,一次能够偷5我的。 可是我天天都要上班,时时刻刻的掏手机给偶像进行投票?可能不太好吧?
这个时候,咱们须要的是在手机上先进行一次投票操做,就能够在charles的左边菜单栏获取到对应的请求。 这个时候,咱们须要对想要模拟的请求点击右键,选择repeat。就能够进行重复投票了。
点击右边contents能够看到两个参数,一个叫 openid,是你本身在这个小程序的惟一编码,至关于你在这个小程序的身份证。另外一个是mid,是偷取的明星的编号。
你偷取5个明星,记录5次API,每隔2分钟,请求这几个API,就能保证本身不会错过任何一朵花。
答案固然是否认的啦! 这个时候须要另外一个工具,叫作Postman。是一个能够模拟HTTP请求的一个工具。 你在里面只要输入,请求的API地址,再填入一大堆配置参数,以及header等等,就能够发送成功了。
有没有简单的方法呢? 有! 在Charles里面对请求点右键,选择Copy cURL Request
而后在Postman里面,点击最上栏的Import。
而后在右侧窗口就会生成一个模拟好的请求,点击Send!
这个时候,你在想,我为何必定要隔2分钟点一次? 我就不能让程序自动化起来吗?
在这里用nodejs作例子。 执行cURL命令去调用API。
var exec = require('child_process').exec;
var sys = require('sys');
const hasFlowers = [];
//经过上面教的方法,将想要偷取的明星mid放入数组。
const idolsIds = [];
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function asyncForEach(array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
}
async function createCurlRequestLink() {
const startTime = new Date();
//填入你的OpenId
const openid = 'XXXX';
await asyncForEach(idolsIds, async (number) => {
// for(let number = 1150; number<=3000; number++){
const a = `curl XXXXXXX '{\"openid\":\"${openid}\",\"mid\":${number}}' --compressed`;
await sleep(280);
exec(a, (error, stdout, stderr) => {
try {
console.log(stdout);
const json = JSON.parse(stdout);
if (json.status > 0) {
hasFlowers.push(number);
console.log(`鲜花总数: ${hasFlowers.length * 8}`);
}
} catch (err) {
console.log(err);
}
});
});
const endTime = new Date();
console.log(`花费时间: ${(endTime - startTime) / 1000}`);
}
createCurlRequestLink();
// 每2分钟去偷取一次
setInterval(createCurlRequestLink, 120000);
复制代码
而后用 node 文件名 就能够运行它了。
把它丢在服务器上,用screen放在background进程里跑起来。
不知不觉中,几十万的花已经到手啦!
不管是小程序仍是APP,都是在你的手机上。它须要和远程的服务器进行数据交互,也就是API请求。 本质上,咱们只是进行了一次模拟请求,至关于你手机进行了点击。 而讲到刚刚的部分,咱们也依旧是在合理的操做范围许可内。并无任何的做弊行为,只不过让偷花的行为变得自动化了起来。可以在凌晨也让电脑替咱们偷花。
至于开发者能不能防御呢? 这个答案是确定的。 好比,对每个openid进行来源监测,访问设备的监控,请求的时候携带额外参数判断来源。 若是短时间内Openid进行了多个设备的更换,标记为可疑,等等。
可是是否值得,就是另外一个讨论的范畴了。
看到了这里,你能够为所欲为的给你的女神/男神去刷票啦! 既没有浪费时间去一直等待投票的时间,又获得了内心的知足。 若是你看完了这篇文章,那恭喜你,还学到了新知识。
/为了免去没必要要的麻烦,我隐去了我使用的投票软件。/