我为什么跟《幸运儿马克官网》杠上了
讲真,我一开始压根儿就没想去碰这个《幸运儿马克官网》的事儿。你们知道的,我平时分享的都是自己瞎折腾的一些小东西,哪个省事儿我弄哪个。但这回不一样,是被逼的。
我楼下那小伙子,刚毕业没几年,进了家做活动的互联网公司,他们每天都要从这个“幸运儿马克”的网站上扒数据,看看今天又出了什么幺蛾子。他天天跟我抱怨,说这网站三天两头崩,数据老是丢,叫我帮他看看能不能搞个自动化的工具出来。我一听就乐了,不就是一个官网嘛能有多大点事儿?
第一次尝试:被拒之门外
我当时想得可简单了。不就是抓数据吗?我直接打开浏览器,输入那串地址,回车,打算先看看它到底长啥样。结果?好家伙,页面转了半天,直接弹出来一个“您所在的区域无法访问”的提示。我当时差点没骂出声。一个破抽奖活动网站,还搞起地域限制来了?
我心想这不成心找茬吗?我为了这事儿,赶紧找了个代理工具换了个IP,这才总算能看到页面。小伙子说的数据就在登录后的页面里,看来我得先搞定登录这一关。
被代码折腾:一锅糊涂的大杂烩
小编温馨提醒:本站只提供游戏介绍,下载游戏请前往89游戏主站,89游戏提供真人恋爱/绅士游戏/3A单机游戏大全,点我立即前往》》》绅士游戏下载专区
能看到页面只是万里长征第一步。我打开F12,开始抓包,打算模仿一下登录流程。我以为就是个简单的账号密码POST过去的事儿,结果又被这网站给上了一课。
我发现它用的登录流程,简直就是一锅乱七八糟的大杂烩,完全没有章法可言:
- 第一步,它要求先取一个临时密钥。 这个密钥不是放在URL参数里,而是藏在某个请求的头部里,你不仔细看根本找不到。
- 第二步,它把账号密码传过去之前,还得用这个临时密钥进行一次对称加密。 我得先在本地用JS模仿它的加密算法,折腾了半个多小时才把那段加密逻辑扒出来。
- 第三步,也是最离谱的,验证码。 它的验证码不是图片,是他们自己瞎搞的一个Canvas画出来的图形。我必须跑一个轻量级的浏览器环境,把那段JS代码跑一遍,才能知道验证码是什么,简直是脱了裤子放屁。
我花了一整天的时间,才把这三步给彻底搞明白,感觉自己不是在写自动化脚本,而是在破解一个十年前留下来的技术古董。
的难题:一个绝世大坑
总算,我把所有步骤都模拟完了,脚本跑起来,成功登录!我正得意,结果脚本想去抓取目标数据页面的时候,又被踢回了登录页!
我当时差点想把我的电脑砸了。这特么是哪个天才程序员设计出来的系统?我冷静下来,又把所有的网络请求记录翻了个遍,终于找到了问题所在。
原来是Cookie。这个网站登录成功后给的Session Cookie,有效期竟然只有短短的二十秒!二十秒内你不去请求目标数据页面,它就认为你超时,直接把你踢回首页,让你重新登录。我猜他们公司内部是不是有那种“敏捷开发,快速过期”的奇葩规定?
我没办法,只能赶紧优化我脚本的流程,把从登录成功到请求目标数据页面的时间差,压缩到了十五秒内。等我彻底把这个时间卡死,数据才终于安安稳稳地被我抓了下来。我感觉我不是在写代码,我是在跟一个急性子的机器人赛跑。
小伙子拿到工具后直说“叔叔厉害”,我也只是笑笑。所以你们看,很多时候,一些看起来牛哄哄的网站,骨子里可能就是一群不同技术栈的团队东拼西凑出来的,毛病一大堆。我的实践记录告诉大家,折腾这种东西,比写代码本身要费劲得多。

