第1知识点:关于json请求体
第2知识点:关于精准请求(如何排除干扰请求)
第3知识点:入口定位
一、关键字方法
(1) 方法关键字
encrypt :加密入口
decrypt :解密入口
JSON.stringify:加密入口
JSON.parse:解密入口
(2) key关键字
(3) headers关键字 xxx()
(4) 拦截器关键字
interceptors.request.use
interceptors.response.use
(5) 路径关键字
第4知识点:断点与断点调试
普通断点
XHR断点
条件断点
日志断点
脚本断点
import time
import base64
import requests
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
from hashlib import md5
import jsonheaders = {}# 生成sign值
def get_sign(data):# (1) 剔除空值new_data = {}for key, val in data.items():# print(key, val)if val == "" or val == 0:continuenew_data[key] = val# print(new_data)# (2) 排序s = new_data.items()# print(s)ret = sorted(s, key=lambda item: item[0])# print(ret)s2 = ""for key, val in ret:s2 += key + str(val)# print(s2)ra = "B3978D054A72A7002063637CCDF6B2E5"n = ra + s2# (3) 生成md5值m = md5()m.update(n.encode())sign = m.hexdigest()# print(sign) # 4145a19057c83fd6a99163d0bd2f5e88return signdef decrypt(res):# 基于Python做出AES的解密# (1) base64解码base64_encrypt_data = res.json().get("Data")# print(base64_encrypt_data)encrypt_data = base64.b64decode(base64_encrypt_data)# print(encrypt_data)# (2) aes解密k = 'EB444973714E4A40876CE66BE45D5930'.encode()i = 'B5A8904209931867'.encode()aes = AES.new(key=k, mode=AES.MODE_CBC, iv=i)data = aes.decrypt(encrypt_data)data = unpad(data, 16)data = json.loads(data)print(data)for i in data["Table"]:print(i.get("NAME"))def main():for i in range(1,10):json_data = {"ts": int(time.time() * 1000),"pageNo": i,"pageSize": 20,"total": 2798,"AREACODE": "","M_PROJECT_TYPE": "","KIND": "GCJS","GGTYPE": "1","PROTYPE": "","timeType": "6","BeginTime": "2024-09-29 00:00:00","EndTime": "2025-03-29 23:59:59","createTime": ""}sign = get_sign(json_data)headers["portal-sign"] = signresponse = requests.post('https://ggzyfw.fujian.gov.cn/FwPortalApi/Trade/TradeInfo', headers=headers,json=json_data)# 解密decrypt(response)time.sleep(1)if __name__ == '__main__':main()