利用账号密码模拟登录新浪微博

    前几个月研究了下利用账号密码模拟登录新浪微博,搞了好长时间都没有结果,最后无赖的使用cooike爬到了数据。这几天因为自己要做个东西,必须用账号密码登录,于是又研究了下,结果很快就弄出来了。想想之前搞了那么常时间都没弄出来,难道我在这几个月里编程水平提高了??? -_-||

一,工具

chrome+fiddler。
注意:
1,本来想直接使用火狐提供的httpfox,但是就在前几天火狐浏览器突然升级了,然后这个工具我就找不到了。
2,在使用fiddler的时候,若抓取不到chrome中的数据,原因很可能是你用了一些插件使fiddler抓取不到数据,需要将插件关闭。
3,现在新浪都使用的是https的连接了,所以需要在fiddler中设置抓取https。本来想用火狐的,结果前几天升级了,导致fiddler导入的证书不安全,根本访问不了新浪的网址。真是r了狗。
总之还是用chrome吧。

二,新浪认证流程

     使用fiddler的一个好处就是抓取的信息很完整,至少感觉比httpfox要完整。这次使用fiddler好好的查看了下新浪认证的流程,下面总结一下。
     新浪有很多个登录入口,而新浪使用了SSO(单点登录)的方法进行认证,即:在一个登录节点登录后,访问其他的网络服务时,就不需要登录了。所以如果你想要模拟登录微博,其实不用直接模拟登录weibo.com,因为weibo.com很可能还会让你输入登录的验证码什么的。特别麻烦。这里选择了另一个登录网址https://login.sina.com.cn/signup/signin.php,通过这个网址登录不用输入验证码,但是此时登录的还不是微博,在上面的那个网址认证成功后,利用得到的cookie再去weibo.com或weibo.cn认证,最后获取weibo.com或weibo.cn的cookie,之后爬取数据就可以通过cookie进行了也就是我之前写的那篇博客
    回到之前的登录流程上,先打开fiddler,再打开https://login.sina.com.cn/signup/signin.php这个网址。这里写图片描述
然后输入用户名,密码。点击登录。在fiddler上能看到请求了很多网址。
这里写图片描述
这里比较重要的网址有这几个:
1,login.sina.com.cn/sso/prelogin.php?entry=account&callback=sinaSSOController.preloginCallBack&su=MTU4NTAzMTg0MDc%3D&rsakt=mod&client=ssologin.js(v1.4.15)&_=1512008557384
2,login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)&_=1512008557445
3,passport.weibo.com/wbsso/login?ticket=ST-NjM3MjA0MTM1NA%3D%3D-1512008674-gz-AD5F649D2BAA76814D96D3CB494D033B-1&ssosavestate=1543544674&callback=sinaSSOController.doCrossDomainCallBack&scriptId=ssoscript0&client=ssologin.js(v1.4.19)&_=1512008557867
4,passport.weibo.cn/sso/crossdomain?action=login&savestate=1&callback=sinaSSOController.doCrossDomainCallBack&scriptId=ssoscript3&client=ssologin.js(v1.4.19)&_=1512008557868
如图所示:
这里写图片描述
其中,1对应了新浪的预登录,2表示新浪的正式登录,3,表示获取weibo.com的跨域认证。4表示到weibo.cn的跨域认证。而我们所需要的就是3,4返回的cookie。

2.1 预登录

在fiddler中点击带1 中prelogin的url时,可以看到请求时的参数和请求返回的参数,请求的参数如下:
这里写图片描述
根据其他博主的探索可以知道,su表示的加密后的用户名,加密算法为base64。_为时间戳,其他的值是固定的。
返回的结果如下:
这里写图片描述
其中比较重要的是nonce,pubkey,rsakv,以及servertime参数。在下一步的加密密码时需要用到。

2.2 登录

1 中预登录完成后,会继续请求2 的url。在请求2 中的url时,是post,post的数据如下:
这里写图片描述
可以看到在预登录中返回的nonce,pubkey,rsakv,以及servertime参数都加入到了该post的data中,其中的sp表示的是加密后的密码,用到的是ras加密,根据其他博主的探究得知加密的公钥是上一步中的pubkey+js文件中指定的“10001”模块。然后再加上上步得到的servertime以及nonce参数。对于加密这一块并不是很懂,所以在程序中只是调用ssologin.js文件中加密部分对密码进行加密。post的其他参数目前固定,所以直接填入即可。
当用户密码正确时,返回值如下:
这里写图片描述
可以看到返回的crossDomainUrlList中包含的就是向weibo.com,97973,以及weibo.cn等新浪服务跨域访问的凭证了。

2.3 获取cookie

在上一步中返回了weibo.com,weibo.cn的登录地址,现在所做的就是访问这几个url,带上第二部中得到的cookie就可以成功的获取到weibo.com,或weibo.cn的cookie。最后带上获取的cookie就可以爬取页面数据了。
    悲伤的消息:博主今天用程序模拟登录时发现不能登录到weibo.cn,可以登录到weibo.com。每次登录weibo.cn的时候都是重定向到登录界面,但是程序显示的结果确实是获取到了weibo.cn的cookie。好伤心。请问有人研究过登录weibo.cn的小伙伴能跟我交流一下QAQ 2017-12-05

    个人推荐爬去weibo.cn的数据,因为在weibo.com中涉及到页面的分步加载,以及页面返回的是unicode等问题,操作繁琐。所以爬去weibo.cn的数据要简单。

三,代码实现

     微博登录的流程大致是这样,但是新浪会时不时改动登录的逻辑,但是改动应该不会很大,所以使用时,请务必按照以上步骤自己试验一遍看看是否有参数发生了变化。代码已上传:http://download.csdn.net/download/tyoukai_/10139542

参考:
http://www.csuldw.com/2016/11/10/2016-11-10-simulate-sina-login/?utm_source=tuicool&utm_medium=referral
http://blog.csdn.net/fly_leopard/article/details/51082531

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值