RAIL

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

放肆的年华 提交于 2020-02-27 12:52:37
郑重声明: 本文仅供学习使用,禁止用于非法用途,否则后果自负,如有侵权,烦请告知删除,谢谢合作! 开篇明义 本文针对 自主开发 的 抢票 脚本在抢票过程中常常遇到的 请求无效 等问题,简单分析了 12306 网站的前端加密算法,更准确的说,是探究 RAIL_DEVICEID 的生成过程. 因为该 cookie 值是抢票请求的 核心基础 ,没有它将无法正确发送请求,或者一段时间后就会到期失效需要重新获取,或者明明更改了浏览器用户代理(navigator.userAgent)标识却还是被限制访问... 因为它并不是真正的客户端标识,只是迷惑性战术,浏览器唯一标识其实是 RAIL_OkLJUJ 而它却被 12306 网站设计者 故意没有添加到 cookie ,因此造成了很强的欺骗性,编程真的是一门艺术! 你以为你的爬虫已经可以正常模仿浏览器,殊不知,只要没搞懂谁才是真正的浏览器标识,那么再怎么换马甲也 难逃造假事实 . 上图展示了 RAIL_OkLJUJ 的存在位置,可能是为了 兼容市面上绝大数浏览器 ,也可能是为了 联合各种前端缓存技术作为特征码 ,总是除了 cookie 之外, RAIL_OkLJUJ 存在于 Local Storage , Session Storage , IndexedDB 和 Web SQL 等. 值得注意的是,cookie 中 故意没有设置 RAIL

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

不问归期 提交于 2020-02-26 04:59:38
直奔重点 高楼大厦寻关键线索 Js文件中关于网络请求最典型的就是异步回调,将原本简单的操作复杂化,非要你等我,我等他,他还等着他的她. 最终直接结果就是整个请求流程反过来了,假设正常流程:是 A->B->C-D-E-F,那么异步请求很可能陷入这样的陷阱: F <- E <- D <- C <- B <- A 所以一层又一层的回调函数真的是难以维护,这种技术也在慢慢淘汰更新成更容易维护的方式,还是不再展开了,回到正题上来,还是先找到程序到底什么时候开始调用的吧! ja.prototype = { initEc: function(a) { var 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 (var

运算放大器

99封情书 提交于 2019-11-28 19:46:56
  运算放大器(简称“运放”)是具有很高放大倍数的电路单元。在实际电路中,通常结合反馈网络共同组成某种功能模块。它是一种带有特殊耦合电路及反馈的放大器。其输出信号可以是输入信号加、减或微分、积分等数学运算的结果。由于早期应用于模拟计算机中,用以实现数学运算,故得名“运算放大器”。运放是一个从功能的角度命名的电路单元,可以由分立的器件实现,也可以实现在半导体芯片当中。随着半导体技术的发展,大部分的运放是以单芯片的形式存在。运放的种类繁多,广泛应用于电子行业当中。   运算放大器原理   运放如图有两个输入端a(反相输入端),b(同相输入端)和一个输出端o。也分别被称为倒向输入端非倒向输入端和输出端。当电压U-加在a端和公共端(公共端是电压为零的点,它相当于电路中的参考结点。)之间,且其实际方向从a 端高于公共端时,输出电压U实际方向则自公共端指向o端,即两者的方向正好相反。当输入电压U+加在b端和公共端之间,U与U+两者的实际方向相对公共端恰好相同。为了区别起见,a端和b 端分别用"-"和"+"号标出,但不要将它们误认为电压参考方向的正负极性。电压的正负极性应另外标出或用箭头表示。反转放大器和非反转放大器如下图:   一般可将运放简单地视为:具有一个信号输出端口(Out)和同相、反相两个高阻抗输入端的高增益直接耦合电压放大单元,因此可采用运放制作同相、反相及差分放大器。