上周更新了一篇利用selenium+在线验证码识别的微博cookie池,今天这篇我们用requests库实现这个流程,效率提升不只是一点点啊。测试跟登陆获取cookie的流程是一样的,这里主要分析一下微博用requests登陆的方式。首先我们先看看用requests库登陆的接口http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18),这个接口是楼主在网上找的,有有一个好处就是只要账号密码正确了就不需要验证码,不知道以后会不会改,如图是登陆界面
一开始楼主是在谷歌浏览器进行抓包,结果发现微博的登陆有点复杂,浏览器的抓包不能准确的抓到整个流程,这个时候祭出我们的大杀器fiddle。我们现在页面填上账号密码,如图
这个时候打开fiddler进行监听,再点击登陆,抓包的结果如图
图中圈住的三个请求就是登陆的整个流程,这里说一下思路。微博的登陆分三次请求,点击登陆键之后,会有有一次预登陆,URL是https://login.sina.com.cn/sso/prelogin.php?entry=sso&callback=sinaSSOController.preloginCallBack&su=MTcxNjYxMDM0ODQ%3D&rsakt=mod&client=ssologin.js(v1.4.15)&_=1501138087057
第一次发送的是get请求,返回一段json,里面的很多参数都是在第二次post账号密码的时候需要携带的参数,如图是第一次请求的返回结果
图中红色箭头标注了部分第二次请求需要携带的参数
再来看第二次post账号跟密码的请求,URL是
https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)&_=1501138087464
这里值得注意的是账号跟密码是通过加密的,用户名用的是base64加密,密码是用rsa加密,这里用python实现的加密方式如下
看一下最后需要post的整个data,参数都是上面提取的
一般把账号密码提交上去就算完成登陆流程了,但是微博还有一部,还需要再发一次请求返回的cookie才是有效的,这个第三次请求的URL是在第二次请求的返回信息里面的,也是一段json,我们直接用正则提取这个URL再访问就可以了,代码比较简单,如下
这样就可以完成微博的登陆了,获取的cookie就是有效的cookie了,不过在这里有个硬伤,就是这个cookie只能访问PC端的微博,不能访问手机端的,抓包分析比较复杂,由于目前没有需求就没有继续去研究了。
之前看到好几个小伙伴都想爬爬启信宝里面的信息,接下来打算研究一下,如果还有别的比较好练手的网站小伙伴也可以提一下,我有兴趣也去搞一下。嘿哈嘿哈(此处应有标签)