12306 抢票系列之只要搞定RAIL_DEVICEID的来源从此抢票不再掉线(中).docx

上传人:A*** 文档编号:142724360 上传时间:2020-08-22 格式:DOCX 页数:35 大小:1.37MB
返回 下载 相关 举报
12306 抢票系列之只要搞定RAIL_DEVICEID的来源从此抢票不再掉线(中).docx_第1页
第1页 / 共35页
12306 抢票系列之只要搞定RAIL_DEVICEID的来源从此抢票不再掉线(中).docx_第2页
第2页 / 共35页
12306 抢票系列之只要搞定RAIL_DEVICEID的来源从此抢票不再掉线(中).docx_第3页
第3页 / 共35页
12306 抢票系列之只要搞定RAIL_DEVICEID的来源从此抢票不再掉线(中).docx_第4页
第4页 / 共35页
12306 抢票系列之只要搞定RAIL_DEVICEID的来源从此抢票不再掉线(中).docx_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《12306 抢票系列之只要搞定RAIL_DEVICEID的来源从此抢票不再掉线(中).docx》由会员分享,可在线阅读,更多相关《12306 抢票系列之只要搞定RAIL_DEVICEID的来源从此抢票不再掉线(中).docx(35页珍藏版)》请在金锄头文库上搜索。

1、12306 抢票系列之只要搞定RAIL_DEVICEID的来源,从此抢票不再掉线(中)直奔重点高楼大厦寻关键线索Js文件中关于网络请求最典型的就是异步回调,将原本简单的操作复杂化,非要你等我,我等他,他还等着他的她.最终直接结果就是整个请求流程反过来了,假设正常流程:是 A-B-C-D-E-F,那么异步请求很可能陷入这样的陷阱: F - E - D - C - B - A所以一层又一层的回调函数真的是难以维护,这种技术也在慢慢淘汰更新成更容易维护的方式,还是不再展开了,回到正题上来,还是先找到程序到底什么时候开始调用的吧!ja.prototype = initEc: function(a) v

2、ar b = , c = this , d = void 0 != a & void 0 != a.localAddr ? a.localAddr : ; c.checkWapOrWeb(); this.ec.get(RAIL_OkLJUJ, function(a) b = a; c.getDfpMoreInfo(function() if (!(9E5 F(RAIL_EXPIRATION) - (new Date).getTime() & null != F(RAIL_DEVICEID) & void 0 != F(RAIL_DEVICEID) & !c.NeedUpdate() for (

3、var a = , e = , g = c.getpackStr(b), m = , q = , t = , k = , n = 0; n g.length; n+) new != gn.value & -1 = Fb.indexOf(gn.key) & (-1 != Gb.indexOf(gn.key) ? q.push(gn) : -1 != Ib.indexOf(gn.key) ? t.push(gn) : -1 != Hb.indexOf(gn.key) ? k.push(gn) : m.push(gn); g = ; for (n = 0; n q.length; n+) g = g

4、 + qn.key.charAt(0) + qn.value; q = ; for (n = 0; n k.length; n+) q = 0 = n ? q + kn.value : q + x + kn.value; k = ; for (n = 0; n a; a+) G(function() (new ja).getFingerPrint() , 20 + 2E3 * Math.pow(a, 2); else (new ja).getFingerPrint(); G(function() r.setInterval(function() (new ja).getFingerPrint(

5、) , 3E5) , 3E5)与此同时,Pa 函数也是 js 文件的第一行代码,来都来了,那就顺便看一眼 js 的整体结构代码吧!(function() )();自执行的匿名函数实现的闭包,这样的好处在于函数内的变量不会污染其他文件,更何况混淆之后的变量名称充斥着大量的变量 a,b,c,d,e,f之类的,不用闭包也不行啊!现在继续以 Pa 为线索搜索,最终发现了函数入口,除此之外再无其他.var mb = !1;u.addEventListener ? u.addEventListener(DOMContentLoaded, function b() u.removeEventListener

6、(DOMContentLoaded, b, !1); Pa(), !1) : u.attachEvent & u.attachEvent(onreadystatechange, function c() mb | interactive != u.readyState & complete != u.readyState | (u.detachEvent(onreadystatechange, c), Pa(), mb = !0)js 是典型的事件驱动型编程语言,当发生什么什么事件后我要干这个,页面加载时我要开始工作了,按钮被点击了我要登录了,页面关闭时我要下班了等等诸如此类的逻辑.上述代码实现的就是页面元素加载成功后开始执行 Pa() 函数,而 Pa 函数又会执行 (new ja).getFingerPrint() ,紧接着又会执行 initEc 函数.现在基本流程已经大致清楚了,总结一下基本代码逻辑如下:(function() var mb = !1; u.addEventListener ? u.addEventListener(DOMContentLoaded, function b() u.removeEventList

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号