如果要想获取微博中的数据,最重要的第一步就是模拟登录了,如果登录都不行,后续的都是扯淡。这里主要分析微博的登陆过程,新浪微博的认证流程:

1、这里在火狐下使用HttpFox工具抓取登陆的数据交互,打开HttpFox,用户进入weibo.com/login.php登陆页面,抓取得到数据如下:

我们用浏览器登陆weibo.com/login.php网页时,服务器在不断地跳转,从不同的位置给客户端返回所需的资源及稍后登陆所需的数据。我们需要找到对我们登陆所需要的信息,重要的交互记录如下:

选中的部分,从http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.11)&_=1387782049912站点位置GET得到的内容会在Content窗口显示,格式为Text/html,即:

sinaSSOController.preloginCallBack({"retcode":0,"servertime":1387782050,"pcid":"xd-62049b61eeb94c62c92e4c4d10db7dcb4c7d","nonce":"DF8VR6","pubkey":"EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443","rsakv":"1330428213","exectime":0})

servertime、nonce 都是登录时候需要使用的,用于POST信息的加密。

2、输入用户名后,当用户名输入框焦点失去的时候,页面将再次访问http://login.sina.com.cn/sso/prelogin.php,得到上步中类似的消息:

这样便得到了新的servertime、nonce 等值,稍后用户登录时使用的是这些数的最新值。

3、输入密码,点击登陆,页面POST请求如下:

分析向http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.11)提交的参数POST Data:

entry    weibo
gateway    1
from
savestate    7
useticket    1
pagerefer
vsnf    1
su    aG91YW5kbGlob21lJTQwZ21haWwuY29t
service    miniblog
servertime    1387784432
nonce    PH653N
pwencode    rsa2
rsakv    1330428213
sp    04b4568a21646afc2418e86c99958ec09d3cf45c624404a96dd63a4f13a09384148af1b727d046ff17727f307460ff0b90db2a4d6c9d3ad1e1809b4756a002cf93129dcb0480b349dba2439db7874d0f32a7c0770d0f80360f6fa139d4e3f09bb2b50099b329cb2de5d59fdafc199dc7b3b2d731b43c5dd0948149fc6df4d624
encoding    UTF-8
prelt    101
url    http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack
returntype    META

su表示POST的账号,username经过了BASE64加密;password 经过了三次SHA1 加密, 且其中加入了 servertime 和 nonce 的值来干扰(两次SHA1加密后, 将结果加上 servertime 和 nonce 的值, 再SHA1算一次),sp为加密后的密码。

再看服务器的返回值,Type=text/html (NS_BINDING_ABORTED)而Result=(Aborted),Content窗口为:Error loading content (NS_ERROR_DOCUMENT_NOT_CACHED),因为网页发生了重定向跳转,原网页中止,HttpFox没有捕获到返回值。通过Python程序可以得到返回值,如下:

<html>
<head>
<title>新浪通行证</title>
<meta http-equiv="refresh" content="0; url='http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&ssosavestate=1390380654&ticket=ST-MzQ4NzQ5NTYyMA==-1387788654-xd-FED0CAF6BC574B4DE353DF875F9DB6AF&retcode=0'"/>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
</head>
<body bgcolor="#ffffff" text="#000000" link="#0000cc" vlink="#551a8b" alink="#ff0000">
<script>function pluginLoaded(wbplugin) {try {wbplugin && wbplugin.webSigned();}catch(e){}}
</script>
<object type="application/x-signassist" width="0" height="0">
<param name="onload" value="pluginLoaded(this)" />
</object>
<script type="text/javascript" language="javascript">
location.replace("http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&ssosavestate=1390380654&ticket=ST-MzQ4NzQ5NTYyMA==-1387788654-xd-FED0CAF6BC574B4DE353DF875F9DB6AF&retcode=0");</script>
</body>
</html>

我们关心的返回结果是script部分:

location.replace(http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&ssosavestate=1390380654&ticket=ST-MzQ4NzQ5NTYyMA==-1387788654-xd-FED0CAF6BC574B4DE353DF875F9DB6AF&retcode=0);

因为,HttpFox检测到随后两步的跳转网址为:

蓝色:http://weibo.com/sso/login.php?ssosavestate=1390381500&url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack%2
6sudaref%3Dweibo.com&ticket=ST-MzQ4NzQ5NTYyMA==-1387789500-xd-710FAD84CC8AF2EE75FE5D197CD76234&retcode=0
这一步上传url的值即为script部分(这里由于不是同一次登录,值不同但结构相同),retcode=0表示登陆成功,然后打开url跳转到下一步。

第二步:http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&sudaref=weibo.com

用户登陆成功,返回weibo.com的信息到客户端cookie中,记录了用户登陆信息。

4、接下来就是新浪的SSO(Single Sign-on)登陆了,就是在同一个顶级域名下,通过载入顶级域名的Cookie,来实现统一登陆。服务器会自动再次访问weibo.com(上图第四行),因为cookie已经写入,登陆成功服务器返回302,重定向到用户主页面。此后再访问微博中其他人的主页或使用微博的其他应用,服务器便可以通过cookie来检测用户的状态了。

当然,新浪的登陆方式未来可能发生改动,目前(2013-12-23)大致就是这个过程。

下一篇使用Python实现微博的模拟登陆。

解析新浪微博的登录过程相关推荐

  1. 新浪微博模拟登录分析(含验证码)

    实验室项目结题需要爬取新浪微博的内容做实验,师兄提供了一份已实现的微博爬虫系统.本身可以轻松愉快的完成语聊收集这一部分,然而自己的微博账号始终登录失败.究其原因,结果是登录时需要验证码.而系统对于需要 ...

  2. cas sso单点登录 登录过程和登出过程原理说明

    CAS大体原理我就不说了,网上一大把,不过具体交互流程没说清楚,所以有这篇文章,如果有错误,请多多指教 登录过程 用户第一次访问一个CAS 服务的客户web 应用时(访问URL :http://192 ...

  3. 关于接入新浪微博第三方登录

    近期,做一个关于联合第三方平台的登录接入,初次接触开放平台,在此做个笔记 开发之前的准备如下: 1.注册新浪微博 2.访问新浪微博开发平台http://open.weibo.com,如果是企业,申请企 ...

  4. 英雄远征Erlang源码分析(5)-协议解析与玩家登录处理

    现在,客户端与服务器的连接算是正式建立了,此时用户需要做的第一件事就是登陆.不过在登录之前,我们要先研究下前后端通信的协议. 客户端与服务端建立连接后,通过提前制定好的协议进行交互.具体的协议文档在d ...

  5. win7系统口令登录过程调试方法图解

    转载自:http://www.jb51.net/os/windows/81155.html Windows7以后Winlogon进程是动态的,有用户登录就会创建一个 Winlogon 进程,因此系统中 ...

  6. Windows7 口令登录过程调试

    Windows7 口令登录过程调试 基本原理     Windows7 以后 Winlogon 进程是动态的,有用户登录就会创建一个 Winlogon 进程,因此系统中完全 可能存在多个登录进程,注销 ...

  7. iOS中利用OAuth实现新浪微博账户登录

    首先声明,这篇博客是写给本人自己看的,其目的只在于记录我在研究新浪微博账户登录以及OAuth的一些过程,仅作为本人的知识积累,而不在于知识传播.所以里面的很多细节实现不会赘述.如果你想从头到尾学习这个 ...

  8. CentOS登录过程

    CentOS 8 登录主要涉及3个重要的程序:agetty.login和bash,具体说明如下. agetty:Linux将输入的用户信息写入到如键盘.串行终端设备等,抽象成tty设备文件.agett ...

  9. Linphone-android 登录过程增加自定义消息头流程分析

    注册增加消息头 在saveNewAccount()中: 添加自定义消息头 LinphoneProxyConfig prxCfg = lc.createProxyConfig(identityAddr. ...

最新文章

  1. Android提前加载unity程序,Unity项目嵌入Android App实现过程
  2. SAP RETAIL初阶之事务代码MP83 显示一个预测参数文件
  3. AndroidStudio设置自定义代码格式化codestyle
  4. 防雪崩利器:熔断器 Hystrix 的原理与使用--转
  5. 如何管理和记录 SSIS 各个 Task 的开始执行时间和结束时间以及 Task 中添加|删除|修改的记录数...
  6. 【IT资讯】TIOBE 7月编程语言排行榜显示,这些编程语言更吃香
  7. Java集合(五):Set集
  8. 2给我背书_考研村 | 在哪一瞬间,你觉得寄宿考研学校的背书教室真好?
  9. bzoj 3399: [Usaco2009 Mar]Sand Castle城堡
  10. linux命令 速记表图片,linux命令速记
  11. windows下解决弹窗广告
  12. C语言 会员管理系统
  13. 梗概Kubernetes中的Pause容器为内部镜像源
  14. Python协议攻击脚本(一): Scapy的使用
  15. 2021 typescript史上最强学习入门文章(4w字)
  16. 凝思系统机器名怎么查看_凝思操作系统常见问题及处理方法
  17. 架构师花费近一年时间整理出来的Java核心知识,直击优秀开源框架灵魂
  18. 浅谈对前端开发的简单认识
  19. 基于树莓派采集网关1
  20. 小程序销毁页面的方法

热门文章

  1. 理解OAuth2协议原理
  2. asp毕业设计——基于asp+access的搜索引擎设计与实现(毕业论文+程序源码)——搜索引擎
  3. 性能测试—性能测试方案设计思路总结
  4. 两句话轻松掌握python最难知识点——元类
  5. STM32移植LVGL+旋转编码器接口对接
  6. {{小仓鼠爱攒食物}}EasyPOI
  7. 用镜头讲故事的 4P 法则
  8. 极米投影仪安装外部软件教程
  9. 开源IM-免费企业即时通讯-恩布互联ENTBOOST 1.4发布,增加管理中心
  10. RecyclerView setHasFixedSize 作用