使用Requests模拟请求时,如何将车架号转为PAGEDATA参数值?
解决车架号转PAGEDATA参数的方法
先拆解给定的PAGEDATA值,解码后可发现它的结构是固定前缀 + 车架号 + 固定后缀,再整体转换为十六进制字符串:
确定字符串模板
固定部分为RC142 on Click~RC126 ~RC130 ~RC134,末尾追加~,中间填入目标车架号,最终模板为:RC142 on Click~RC126 ~RC130 ~RC134 {车架号}~比如填入车架号
JTDJC123705048557后,得到字符串:RC142 on Click~RC126 ~RC130 ~RC134 JTDJC123705048557~转换为十六进制字符串
将上述拼接后的字符串中每个字符,转换为两位大写十六进制表示,再拼接所有字符,即可得到目标PAGEDATA参数值。
Python实现转换及完整脚本
import re import requests def vin_to_pagedata(vin): # 构造基础字符串模板 base_str = f"RC142 on Click~RC126 ~RC130 ~RC134 {vin}~" # 逐个字符转十六进制并拼接 pagedata = ''.join(f"{ord(char):02X}" for char in base_str) return pagedata link = 'https://www.mobilit.fgov.be/WebdivPub_FR/wmvpstv1_fr.jsp' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36', } # 替换为目标车架号 target_vin = 'JTDJC123705048557' with requests.Session() as s: s.headers.update(headers) res = s.get(link) session_id = res.url.split("=")[1] p_step_id = re.findall(r"pStepId=(.*?);", res.text)[0] window_id = re.findall(r"windowId=(.*?);", res.text)[0] # 动态生成PAGEDATA参数 params = { 'SUBSESSIONID': session_id, 'DYNAMIC': 'DOREQUEST', 'NAME': 'CMV_WD_PBL01_CONSULT_STATUS', 'PSTEPID': p_step_id, 'WINDOWID': window_id, 'PAGEDATA': vin_to_pagedata(target_vin) } resp = s.get(link, params=params) print(resp.text)
验证说明
运行脚本后,生成的PAGEDATA值会和抓包得到的完全一致,无需硬编码参数;更换车架号只需修改target_vin变量即可。
内容的提问来源于stack exchange,提问作者MITHU
相关产品推荐
相关产品推荐

