赞
踩
利用charles抓取预约请求,将请求数据复制到postman中进一步分析,利用python脚本模拟预约请求,最后用服务器定时运行脚本。
下载地址https://www.charlesproxy.com/download/,根据系统选择对应的版本。
下载后双击安装包,如果显示
说明以前安装过了。
下面是新安装的页面(安装过程基本上全部默认即可)。
安装过程中进度条不动可能是权限不够的原因,过几秒后会弹出提示框,点击是。
安装成功。
charles可以免费试用30天。如试用期已到,可进行破解(仅用于学习,强烈建议支持正版)。
破解工具地址https://www.zzzmode.com/mytools/charles/。
输入注册名,点击生成
弹出对应密钥
复制密钥至剪切板。
打开Charles,点击help->register
弹出注册框
将注册名和密钥输入点击register即可。
配置完成
以我们学校的预约程序为例
在预约前清理多余的包
点击确认预约
点击第一个包,可以看到抓到了预约的包。
右键点击第一个包,选择复制请求。等会将请求放入postman中。
我们也可以直接在charles中进行分析,只是我习惯使用postman。
下载地址https://www.postman.com/downloads/,下载对应系统的安装包。
双击安装包。
不登录直接使用页面如下
导入后先将请求保存
编写代码时Params和Headers固定,这里不分析。
点击body。可以看到类型为text,而不是常用类型json
两次请求数据
在1月5日请求1月6日8.00-21.00的304-64号座位
beginTime=1704499200&duration=46800&seats%5B0%5D=11439&is_recommend=1&api_time=1704435599&seatBookers%5B0%5D=
在12月29日请求12月30日18.00-19.00的304-66号座位
beginTime=1703930400&duration=3600&seats%5B0%5D=11441&is_recommend=1&api_time=1703852294&seatBookers%5B0%5D=304808
变量名(含义) | 类型 |
---|---|
beginTime(开始时间) | 时间戳 |
duration(持续时间) | int(秒) |
seats%5B0%5D(座位编号11439 - 11375 = 64) | int(id - title) |
is_recommend(是否推荐) | bool |
api_time(请求时间/当前时间) | 时间戳 |
seatBookers(预约者编号) | int |
这里的是否推荐是通过之前预定的座位自动判断的,值可以随意。
当然我们也可以使用在线工具测试我们的代码是否可以成功运行,如菜鸟工具https://c.runoob.com/compile/9/
下载地址https://www.jetbrains.com/pycharm/download/?section=windows
选择自己的系统,点击下载
C盘不够可以修改盘符。
看情况勾选,一般都选就可以
PyCharm可以免费试用30天。如试用期已到,可进行破解(仅用于学习,强烈建议支持正版)。
整个代码构成
import requests from datetime import datetime, timedelta # 目标URL url = '' # 请求头 headers = { 'Host': '', 'accept': '', 'api-token': '', 'User-Agent': '', 'content-type': '', 'Origin': '', 'Sec-Fetch-Site': '', 'Sec-Fetch-Dest': '', 'Referer': '', 'Accept-Language': '', 'Cookie': '', # 添加其他头信息... } # URL参数 params = {'LAB_JSON': ''} # 要发送的数据 # 当前时间(固定) api_time = datetime.now() # 开始时间为两天后的8.00 day = 2 beginTime = (api_time + timedelta(days=day)).replace(hour=8, minute=0, second=0, microsecond=0) # 持续时间秒 hours = 13 duration = 60 * 60 * hours # 座位号(须填) seats = # 预定者(用户)编号() seatBookers = data = 'beginTime={}&duration={}&seats%5B0%5D={}&is_recommend=1&api_time={}&seatBookers%5B0%5D={}'.format( beginTime.timestamp(), duration, seats, api_time.timestamp(), seatBookers ) # 发送POST请求 response = requests.post(url, params=params, headers=headers, data=data) # 检查响应 if response.status_code == 200: print('请求成功!') print('响应内容:', response.text) else: print(f'请求失败,状态码: {response.status_code}') print('错误内容:', response.text)
url = ‘’
问号之前的地址
headers = {
‘Host’: ‘’,
‘accept’: ‘’,
‘api-token’: ‘’,
‘User-Agent’: ‘’,
‘content-type’: ‘’,
‘Origin’: ‘’,
‘Sec-Fetch-Site’: ‘’,
‘Sec-Fetch-Dest’: ‘’,
‘Referer’: ‘’,
‘Accept-Language’: ‘’,
‘Cookie’: ‘’,
#添加其他头信息…
}
Headers中的所有信息(不用变)。
params = {‘LAB_JSON’: ‘’}
url中?后面的参数,或者点击params查看。
我们学校是当天21:00可以预约两天后的座位。时间段为8:00-21:00
api_time = datetime.now()
#这里设为两天后的8:00
day = 2
beginTime = (api_time + timedelta(days=day)).replace(hour=8, minute=0, second=0, microsecond=0)
#13个小时
hours = 13
duration = 60 * 60 * hours
#不一定是显示的编号
seats =
填请求中的值即可
seatBookers =
因为代码编写简单只能固定时间段固定一个座位,如果要改只能改请求参数。
下载地址https://github.com/kingToolbox/WindTerm/releases
直接压缩即可,可以创建快捷方式放桌面。
打开windterm后,在会话栏右击。
选择ssh,填入对应信息。
#创建代码存放文件夹
mkdir /opt/python_script
#进入文件夹
cd /opt/python_script/
可以使用shell软件或者别的传输软件
crontab -e
0 21 * * * /usr/bin/python3 /opt/python_script/zwu_lib.py
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。