本博客仅供交流学习使用
最近因为经常打黎明杀机,需要用加速器的次数也变多了,但是总是需要去手动的恢复时间和暂停时间,非常的麻烦,在网上搜了一下发现之前有人写过类似的项目,但是用来下载的链接炸掉了,于是乎就打算自己也做一个玩玩。
首先第一步,先去分析一下他们家网页端,可以看到网页这里有恢复时间和暂停时间的选项的,我们可以从这里作为入手点,在客户端上不好操作。
打开我们万能的Fiddler,俗话说的好啊,Fiddler学的好,牢饭吃的饱 ,分析下点击了恢复时间之后发生了些什么。
可以看到它是POST请求来发包到recover那里,发送的是json格式的数据,数据中就包含了两项,一项是最重要的用户的token,另一项则是语言。
然后我们去看一看从服务端返回了什么。
返回了json数据,其中包括一项code,在此可以推断出0就是正常状态,一项是msg,编码转译过来的意思就是成功,那一项data倒是不太清楚,里面也没有数据可以分析,并且我在开发过程中也没有遇到过code不为0的情况,一般来说都是为0的。
暂停时间也是同样的原理,只不过url换了一下而已。
然后就是这个token如何拿到了,一般就是在登录时,如果登录成功了,它就会给你返回一个token来使用。
这里的登录也是和之前的发包都大同小异,直接上json数据来看。
username和password两项就是用户名和密码,其他一般都是固定的,但是这里密码是加密的,后来通过查询得知,密码的加密方式就是md5方式来加密,并且转为了32位的小写,在模拟发包的时候需要注意一下。
它返回来的json数据中,日常包含一个code没有什么问题,还有一个account_token,这个就是我们想要的了,expiry_time应该是token的到期时间,也就是说,在我们编写脚本的过程中,需要注意做一个token失效检测的逻辑判断。至于nn_token就不太清楚是做什么的,不过我们也用不到,就暂时先忽略掉。
okk,准备工作差不多已经完成了,接下来就是重头戏–敲代码的部分
先声明一些要用到的变量和用到的库
import requests # 模拟发包
import json # 封装和解析json数据
import sys # 用来终结自己的进程
import hashlib # md5加密相关url_recover = 'https://webapi.nn.com/api/user/recover'
url_pause = 'https://webapi.nn.com/api/user/pause'
url_login = 'https://webapi.nn.com/api/auth/login'
headers = {'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)','Accept': 'application/json, text/plain, */*','Content-Type': 'application/json','Origin': 'https://vip-jiasu.nn.com','Referer': 'https://vip-jiasu.nn.com/'
}
这里需要注意的是,headers中的Content-Type需要额外加上,因为要传的是json数据,所以value是application/json
然后来做模拟登录,来获取到关键的token
login_data = {"username": user,"password": md5(pwd),"user_type": 0,"src_channel": "guanwang","country_code": 86,"lang": "zh_CN","region_code": 1,"account_token": "null"}login = requests.post(url=url_login, headers=headers,data=json.dumps(login_data))code = json.loads(login.text).get('code')
这里的变量code是获取它返回的状态值,可以用来检查是否登录成功,顺便一提,状态码500001是用户名或者密码错误。
还有就是md5函数,python里是没有自带这个函数来直接使用的,我们可以创建一个这样的函数:
def md5(str):input = hashlib.md5()input.update(str.encode("utf-8"))return (input.hexdigest()).lower()
拿到token之后就再组一个字典,我这里是使用创建函数,然后将字典传入函数中即可。
# 恢复时间
def recover(data):recover = requests.post(url=url_recover, headers=headers, data=json.dumps(data))return json.loads(recover.text).get('code')
# 暂停时间
def pause(data):pause = requests.post(url=url_pause, headers=headers, data=json.dumps(data))return json.loads(pause.text).get('code')
返回的都是状态值,来判断是否成功了。
这些核心部分完成后,再将剩下的其他零零碎碎的东西补全就好,对于日常使用的问题,我的思路是写一个批处理命令,将脚本和加速器程序同时启动,或者先运行脚本,然后脚本来恢复时间后去拉起程序启动,接着脚本就会循环检测程序的进程状态,根据情况来设置循环间隔长短,如果检测到加速器程序没有在运行时,就执行暂停时间命令,然后kill自己,完成使命。
当我大概都写完了之后,发现在关闭加速器时出现了这个弹窗。。。。
gnn,林北写这么长时间,才发现有这个弹窗,这正常人哪怕忘记暂停时间了也可以通过这个弹窗记起来,然后去关掉吧。。。。
关掉,关掉,一定要关掉