网站标题关键词堆砌,哈尔滨模板建站哪个品牌好,网站内容更新及时,电子商务网站平台建设方案宿舍电费查询——以ZUA为例0. 安装抓包环境手机端桌面端1. 登录1.1 开启抓包后进入缴费页面#xff1a;1.2 分析请求1.3 编写登录代码2. 获取楼栋及房间ID2.1 获取楼栋ID2.2 编写获取楼栋ID代码2.3 获取房间ID2.4 编写获取房间ID代码3. 获取剩余电费#xff1a;3.1 选择房间号…
宿舍电费查询——以ZUA为例0. 安装抓包环境手机端桌面端1. 登录1.1 开启抓包后进入缴费页面1.2 分析请求1.3 编写登录代码2. 获取楼栋及房间ID2.1 获取楼栋ID2.2 编写获取楼栋ID代码2.3 获取房间ID2.4 编写获取房间ID代码3. 获取剩余电费3.1 选择房间号3.2 获取指定房间剩余电量4. 完整python代码免责声明0. 安装抓包环境
按需选择HTTPCanary、WireShark或Fidder等抓包软件这里建议使用HTTPCanary
手机端
参考这篇文章小黄鸟HTTPCanary安装及Android高版本CA证书配置
桌面端
浏览并参考Fidder或WireShark
1. 登录
首先参考小黄鸟抓包实战之完美校园报平安选择微信为目标应用过滤掉不需要的网络请求
1.1 开启抓包后进入缴费页面 1.2 分析请求
输入信息登录后返回HTTPCanary根据Url关键词查找带Login的请求 点击请求下面的Text可以看到登录的请求数据几个比较重要的参数xh/sfz、pwd、xh、Ityp 1.3 编写登录代码
import requestsdef login():login_url http://cwcfw.zua.edu.cn/xysf/api/User/App/Loginlogin_data { #这里填入你获取到的data信息, 由于密码采用 证书加密, 这里暂时不支持直接输入密码xh: xh,pwd: pwd,rsaStr: 8983124,ltyp: id}session.post(login_url, cookiescookie, jsonlogin_data)# 可使用下面代码查看登录状态# response requests.post(login_url, headersheaders, jsonlogin_data)# print(response.text)cookie {ASP.NET_SessionId: ,# 这里面填入登录时抓取到的cookie
}
login()2. 获取楼栋及房间ID
2.1 获取楼栋ID
登录进来后继续打开HTTPCanary并抓包点击电费充值页面此时会跳转到楼栋选择页面 此时返回HTTPCanary并根据Url关键词查找带GetOption的Url 此时在请求-Raw下我们可以看到一个Post请求地址和请求的Data数据而在响应-Text下可以看到返回的json数据
2.2 编写获取楼栋ID代码
随后我们模拟这个请求获取各楼层ID
import json
import requestsdef get_floors():url https://cwcfw.zua.edu.cn/xysf/api/user/ElecRoomIs/GetOptiondata { # 请求中的数据包key: build,option: {areaid: 1,buildid: -1,roomid: -1,IsLxr: False,IsDefault: False,IsFirst: False,Cxid: }}response session.post(url, cookiescookie, jsondata)# print(response.text)floors {} # 将楼栋号和其对应的楼栋ID存入字典for floor in response.json().get(Content)[1:]:if not floor.get(selected):continuename floor.get(label).strip()[:-2]num floor.get(value).strip()floors[name] num# pprint(floors)return floorscookie {ASP.NET_SessionId: ,# 这里面填入登录时抓取到的cookie
}
session requests.session()
login()
floors get_floors()
print(floors) # 查看获取到的楼栋号及ID这里请求采用的是session而不是requests是由于系统的登录策略这个系统在每次登录后激活一段时间的账号使用权限过后就会失去权限。使用login()登录后session保持住会话可以避免请求不到楼层信息。
2.3 获取房间ID
保持HTTPCanary运行这里先选择你所在的楼号
点击选择楼号后离开返回HTTPCanary查找关键词为GetOption的Url 我们可以从响应中看到我们选择的数据包可以获取到房间号以及请求所需的Post地址和Data
2.4 编写获取房间ID代码
根据Post地址和Data模拟这个请求获取各楼层ID
def get_rooms(floor):url https://cwcfw.zua.edu.cn/xysf/api/user/ElecRoomIs/GetOptiondata {key: room,option: {areaid: 1,buildid: floor,roomid: -1,IsLxr: False,IsDefault: False,IsFirst: False,Cxid: }}response session.post(url, cookiescookie, jsondata)# print(response.json())rooms {}for room in response.json().get(Content)[1:]:if not room.get(selected):continuename room.get(label).strip()[:-2]num room.get(value).strip()rooms[name] num# pprint(rooms)return roomscookie {ASP.NET_SessionId: ,# 这里面填入登录时抓取到的cookie
}
session requests.session()
login()
floor_id 78 # 直接手动选择楼栋ID
rooms get_rooms(floor_id)
print(rooms)3. 获取剩余电费
3.1 选择房间号
保持HTTPCanary运行选择房间号后点击确认按钮查询该房间剩余电费
此时返回HTTPCanary并根据Url关键词查找带Recharge的Url
Balance即为所需房间的剩余电量
3.2 获取指定房间剩余电量
def get_balance(floor, room_id):url http://cwcfw.zua.edu.cn/xysf/aAppPage/index.aspx/GetRechargeInfodata {rybh: json.dumps({areaid: 1,buildid: floor,roomid: room_id,IsLxr: False,IsDefault: False,IsFirst: False,Cxid: }),category: ElecRoomIs}response session.post(url, cookiescookie, jsondata)# response.encoding utf-8# print(response.json())Content response.json().get(d).get(Content)address Content.get(CzThirdInfo).get(Czxm).split(/)[-1].split(空调)[0]balance Content.get(CzThirdInfo).get(Balance)return f{room_id}\t{address}: {balance} kWhcookie {ASP.NET_SessionId: ,# 这里面填入登录时抓取到的cookie
}
session requests.session()
login()
floor_id 78 # 直接手动选择楼栋ID
room_id 24245
info get_rooms(floor_id, room_id)
print(info)4. 完整python代码
#!/usr/bin/python3
# -*- coding:utf-8 -*-
# author : xiao6ming6
# time : 2025/7/11 20:45
# function: the script is used to do ...
# version : V1
import json
import requestsdef login():login_url http://cwcfw.zua.edu.cn/xysf/api/User/App/Loginlogin_data { #这里填入你获取到的data信息, 由于密码采用 证书加密, 这里暂时不支持直接输入密码信息需通过抓包填入xh: xh,pwd: pwd,rsaStr: 8983124,ltyp: id}session.post(login_url, cookiescookie, jsonlogin_data)# 可使用下面代码查看登录状态# response requests.post(login_url, headersheaders, jsonlogin_data)# print(response.text)def get_floors():url https://cwcfw.zua.edu.cn/xysf/api/user/ElecRoomIs/GetOptiondata {key: build,option: {areaid: 1,buildid: -1,roomid: -1,IsLxr: False,IsDefault: False,IsFirst: False,Cxid: }}response session.post(url, headersheaders, jsondata)# print(response.text)floors {}for floor in response.json().get(Content)[1:]:if not floor.get(selected):continuename floor.get(label).strip()[:-2]num floor.get(value).strip()floors[name] num# pprint(floors)return floorsdef get_rooms(floor):url https://cwcfw.zua.edu.cn/xysf/api/user/ElecRoomIs/GetOptiondata {key: room,option: {areaid: 1,buildid: floor,roomid: -1,IsLxr: False,IsDefault: False,IsFirst: False,Cxid: }}response session.post(url, headersheaders, jsondata)# print(response.json())rooms {}for room in response.json().get(Content)[1:]:if not room.get(selected):continuename room.get(label).strip()[:-2]num room.get(value).strip()rooms[name] num# pprint(rooms)return roomsdef get_balance(floor, room_id):url http://cwcfw.zua.edu.cn/xysf/aAppPage/index.aspx/GetRechargeInfodata {rybh: json.dumps({areaid: 1,buildid: floor,roomid: room_id,IsLxr: False,IsDefault: False,IsFirst: False,Cxid: }),category: ElecRoomIs}response session.post(url, headersheaders, jsondata)# print(response.json())Content response.json().get(d).get(Content)address Content.get(CzThirdInfo).get(Czxm).split(/)[-1].split(空调)[0]balance Content.get(CzThirdInfo).get(Balance)return f{room_id}\t{address}: {balance} kWhcookie {ASP.NET_SessionId: ,# 这里面填入登录时抓取到的cookie
}
session requests.session()
login()while True:room_name input(enter room name(0 to exit): ).strip()if room_name 0:breakfloor room_name.split(-)[0]floors get_floors()floor_id floors.get(floor)rooms get_rooms(floor_id)rooms_id rooms.get(room_name)balance get_balance(floor_id, rooms_id)print(balance)如需对抓取登录信息方法有疑问可通过评论区或阅读原文交流
免责声明
本文内容仅为技术研究与经验分享旨在提供信息参考。所有方法、代码或操作步骤仅供学习交流不构成任何形式的技术建议或法律依据。
使用者需自行承担因实践本文内容而产生的全部风险。作者及发布平台对任何直接、间接、因使用或无法使用本文内容造成的损失或损害概不负责。
技术应用应遵守所在国家/地区法律法规任何违反法律的行为均与本文无关。建议实施前做好数据备份及环境隔离确保操作安全可控。