1. 动态接口参数破解实战
携程酒店数据的动态加载机制一直是爬虫开发者需要攻克的重点难题。最近在做一个酒店比价项目时,我发现携程的接口参数加密又升级了,特别是那个神秘的eleven参数。经过一周的逆向分析,终于摸清了它的生成逻辑,这里分享下我的破解过程。
首先用Chrome开发者工具分析网络请求,发现酒店详情页的价格数据是通过Ajax请求获取的,关键接口是AjaxHote1RoomListForDetai1.aspx。这个接口需要携带多个参数,其中最难搞的就是eleven参数。通过调用栈分析,发现它是由一个经过混淆的JS文件生成的。
1.1 逆向分析JS加密逻辑
在Sources面板找到oceanball相关的JS文件,格式化代码后发现核心逻辑被封装在eval函数中。这里有个小技巧:在Snippets工具里把eval替换为console.log,就能直接看到执行结果。经过多次调试,发现eleven参数实际上是结合了以下要素生成的:
- 当前时间戳
- 酒店ID的特定算法
- 页面加载时的随机种子
- 用户操作行为指纹
具体实现代码我简化后是这样的:
def generate_eleven(hotel_id):
timestamp = int(time.time() * 1000)
seed = (hotel_id * 149) % 233
dynamic_part = (timestamp + seed) ^ 0xABCDEF
return f"{dynamic_part}@{hotel_id % 1000}"
1.2 动态Cookie维护策略
除了eleven参数,携程还会校验Cookie中的关键字段。通过实验发现,以下Cookie字段必须有效:
_zcy_log_cidMKT_CKID


4215

被折叠的 条评论
为什么被折叠?



