专栏名称: 程序员大咖
为程序员提供最优质的博文、最精彩的讨论、最实用的开发资源;提供最新最全的编程学习资料:PHP、Objective-C、Java、Swift、C/C++函数库、.NET Framework类库、J2SE API等等。并不定期奉送各种福利。
目录
相关文章推荐
51好读  ›  专栏  ›  程序员大咖

超详细的Python实现新浪微博模拟登陆

程序员大咖  · 公众号  · 程序员  · 2018-04-21 10:24

正文

请到「今天看啥」查看全文


图 2

这一步就是预登陆过程,同学们可以自己试试。登陆的时候我们需要用到其中的 servertime、nonce、pubkey 等字段。当然这个不是我自己猜想的,后面的步骤会做说明。

还有一点,就是预登陆的 url:

http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack& su= &rsakt=mod&checkpin=1&client=ssologin.js(v1.4.18)&_=1461819359582

这里 su 的值是自己用户名经过 base64 编码的值。但可能你们会问我是如何知道的呢,待会儿我会讲到。经过实测,如果我们这里不给 su 传参数,其实也是可以的。为了最真实的模拟用户登录,我们最好还是带上它的值。

请看图一的第一条 js 请求http://i.sso.sina.com.cn/js/ssologin.js,同学们可以点进去看,这个就是前面提到的加密用户名和密码等一系列的加密文件了,如果有同学非要问我是怎么找到这个加密文件的,我也只有说:反复抓包,从在浏览器输入 weibo.com 过后就找 js 文件请求路径,然后再用代码格式化工具打开,挨着一个一个看,在代码中搜关键字,比如这里我们可以搜"nonce"、"servertime"等,就能找到加密文件了。

打开加密文件我们可以看到加密用户名的代码,在加密 js 文件中搜索'username',可以看到有一行代码为:

_username = sinaSSOEncoder.base64.encode(urlencode(username));  _现在我们可以直接查找 encode 方法(代码太多就不贴上来了),即可查找到对应方法了,为了验证我们的猜想,我们可以在 webstorm 中 copy 这个 encode 函数带上自己的用户名运行,返回的结果就是 su 的值,这个值在之后进行 post 提交的时候也会用到。如果对加密有一定经验的同学可能一眼就会看出这个是 base64 编码,python 中有个 base64 模块可以干这个事情。我们再回到图一,http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)这个地址就是进行 post 提交数据的地址,下面是我自己提交的数据:

图3

这里我们需要自己构造 su(加密后的用户名),sp(加密后的密码),servertime,nonce,rsakv 等数据,其它数据都不用变。有同学问我为哈其它数据不用变?你自己可以多登陆几次,看变化的值,那么那些值就是需要构造的值,其它值就直接拿过来用就行了。这里的 su,servertime,nonce,rsakv 都已经拿到了,所以当前需要的就只是 sp 的值了。我们还是按照原来的方法在 js 文件中查找"sp",可以找到 requests.sp=password 这段代码,所以我们就只需要看 password 怎么构造的了。通过查找可以看到关键加密代码:







请到「今天看啥」查看全文