分析登录过程的话有很多工具可供选择,Fiddler等抓包工具都是很好的选择。不过这次不需要,由于登录过程需要在浏览器上完成,所以我们这次直接使用浏览器的F12开发人员工具。火狐、Chrome、Edge的F12工具都差不多。这次我就以Edge的为例来说明。
熟悉调试工具
一开始由于我的调试姿势不正确,所以浪费了很多时间。在这里我把我的人生经验分享一下。其实很简单,就是一句话:浏览器必须进入隐私模式。因为浏览器有可能保存以前的登录信息、cookie等,对分析工作造成混淆影响。所以我们必须不断地调试不断地清除数据。不妨直接进入隐私模式,这样所有东西都是新的,方便我们分析。
来上两张图看看。首先是调试工具。在这里我们主要看的就是cookie的值。网页登录的每一步骤我们都需要看看新增加了什么cookie,哪些cookie在登录过程中是必要的。这需要我们一步一步分析。
第二个部分就是网络标签。在这里就是我们主要分析的地方了。登录过程中哪一部分发送了什么类型的数据、发到了哪个URL、服务器返回了什么结果,都需要我们分析,然后模拟出登录过程。这里横排的几个按钮还可以清除缓存、cookie、记录等等,如果我们需要重复分析,这几个按钮是非常方便的。
这里有一个小技巧,那就是内容类型这里。一个网页常常包含了很多静态文件、需要从很多CDN返回图片等,但是这些都是和登录内容无关的东西。所以我们可以在这里选择需要查看的内容,图片之类的几乎完全可以忽略(当然如果遇到验证码,还是需要分析一下)。
如果还有什么不熟悉的地方,最好自己打开几个网页,然后用开发人员工具看看。一个合格的程序员,利用调试工具的技能肯定是必不可少的。另外Edge的开发人员工具是中文的,对于英文不好的同学还是很友好的。
登录过程分析
获取BAIDUID
按照上面的技巧,打开一个隐私模式网页,然后把开发人员工具调教到合适的位置。然后进入百度主页面www.baidu.com
。回到调试工具看看浏览器在这一步做了什么。
首先第一步是访问了https://www.baidu.com/
这个地址,作用是设置了BAIDUID这个cookie。后续的请求我们都需要附上这个cookie。该cookie只有在附有UA的时候才会返回。
获取登录token
然后我们点击百度首页右上角的登录,看看会发生什么。这一步步访问https://passport.baidu.com/v2/api/?getapi&tpl=mn&apiver=v3&tt=1491554358163&class=login&gid=134D887-FD18-4D86-AED8-0880DCA39820&logintype=dialogLogin&callback=bd__cbs__m6q67t
这个地址,可以看到它带了很多参数。其中只有两个参数需要我们注意:一是tt参数,代表当前时间的毫秒数;二是gid,也就是GUID,我们用Python代码就能生成。其他参数不变就行了。
这一步如果成功的话,服务器就会返回一个JSONP。这里最重要的就是data中的token了。我们后续的登陆请求就需要这个玩意。