声明:

由于本人使用用的是Python语言,以下内容就在该语言下进行解释说明。有使用Java语言的可以参考IT男杂记(http://marspring.mobi/http-client-weibo/)

正文:

PC登录新浪微博时,在客户端用js预先对用户名、密码都进行了加密,而且在POST之前会GET一组参数,这也将作为POST_DATA的一部分。这样,就不能用通常的那种简单方法来模拟POST登录(比如人人网)。

通过爬虫获取新浪微博数据,模拟登录是必不可少的。

1、在提交POST请求之前,需要GET获取四个参数(servertime,nonce,pubkey和rsakv),不是之前提到的只是获取简单的servertime,nonce,这里主要是由于js对用户名、密码加密方式改变了。

1.1 由于加密方式的改变,我们这里将使用到RSA模块,有关RSA公钥加密算法的介绍可以参考网络中的有关内容。下载并安装rsa模块:

根据自己的Python版本选择适合自己的rsa安装包(.egg),在win下安装需要通过命令行使用easy_install.exe(win上安装setuptool从这里下载:setuptools-0.6c11.win32-py2.6.exe 安装文件 )进行安装,例如:easy_install rsa-3.1.1-py2.6.egg,最终命令行下测试import rsa,未报错则安装成功。

1.2 获得以及查看新浪微博登录js文件

1.3 登录

登录第一步,添加自己的用户名(username),请求prelogin_url链接地址:

prelogin_url = 'http://login.sina.com.cn/sso/prelogin.php?entry=sso&callback=sinaSSOController.preloginCallBack&su=%s&rsakt=mod&client=ssologin.js(v1.4.4)' % username

使用get方法得到以下类似内容:

sinaSSOController.preloginCallBack({"retcode":0,"servertime":1362041092,"pcid":"gz-6664c3dea2bfdaa3c94e8734c9ec2c9e6a1f","nonce":"IRYP4N","pubkey":"EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443","rsakv":"1330428213","exectime":1})

进而从中提取到我们想要的servertime,nonce,pubkey和rsakv。当然,pubkey和rsakv的值我们可以写死在代码中,它们是固定值。

2、之前username 经过BASE64计算:

1 username_ =urllib.quote(username)2 username = base64.encodestring(username)[:-1]

password经过三次SHA1加密,且其中加入了 servertime 和 nonce 的值来干扰。即:两次SHA1加密后,结果加上servertime和nonce的值,再SHA1算一次。

在最新的rsa加密方法中,username还是以前一样的处理;

password加密方式和原来有所不同:

2.1 先创建一个rsa公钥,公钥的两个参数新浪微博都给了固定值,不过给的都是16进制的字符串,第一个是登录第一步中的pubkey,第二个是js加密文件中的‘10001’。

这两个值需要先从16进制转换成10进制,不过也可以写死在代码里。这里就把10001直接写死为65537。代码如下:

1 rsaPublickey = int(pubkey, 16)2 key = rsa.PublicKey(rsaPublickey, 65537) #创建公钥

3 message = str(servertime) + '\t' + str(nonce) + '\n' + str(password) #拼接明文js加密文件中得到

4 passwd = rsa.encrypt(message, key) #加密

5 passwd = binascii.b2a_hex(passwd) #将加密信息转换为16进制。

2.2 请求通行证url:login_url =‘http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.4)’

需要发送的报头信息

1 postPara ={2 'entry': 'weibo',3 'gateway': '1',4 'from': '',5 'savestate': '7',6 'userticket': '1',7 'ssosimplelogin': '1',8 'vsnf': '1',9 'vsnval': '',10 'su': encodedUserName,11 'service': 'miniblog',12 'servertime': serverTime,13 'nonce': nonce,14 'pwencode': 'rsa2',15 'sp': encodedPassWord,16 'encoding': 'UTF-8',17 'prelt': '115',18 'rsakv': rsakv,19 'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',20 'returntype': 'META'

21 }

请求的内容中添加了rsakv,将pwencode的值修改为rsa2,其他跟以前一致。

如果retcode=101则表示登录失败。登录成功后结果与之类似,不过retcode的值是0。

3、登录成功后,在body中的replace信息中的url就是我们下一步要使用的url。然后对上面的url使用GET方法来向服务器发请求,保存这次请求的Cookie信息,就是我们需要的登录Cookie了。

rsa加密算法python_模拟新浪微博登录(Python+RSA加密算法)相关推荐

  1. php模拟关注微博,PHP基于laravel框架获取微博数据之一 模拟新浪微博登录

    参考资料: http://www.csuldw.com/2016/11/10/2016-11-10-simulate-sina-login/ http://blog.csdn.net/fly_leop ...

  2. php rsa2 微博,PHP 基于laravel框架获取微博数据之一 模拟新浪微博登录

    模拟新浪微博登录是抓取新浪数据的基础,网上的参考资料大多介绍的是用Python开发,有一篇使用php模拟登录的资料还是在phpcms中实现的,也没有太深入分析. PS:网上资料来源比较乱,不知道php ...

  3. 全程模拟新浪微博登录(2015)

    很久之前就了解过模拟登录的过程,最近对python用的比较多,想来练练手,就想实现一下新浪微博登录,首先随便一搜,网上有大量的前辈们都做过了,我也仔细看了一下,并且参考之后发现无法登录,而且还有很多细 ...

  4. Java RSA、AES加解密,Python RSA、AES加解密

    需求 python服务发起加密http请求网关,网关验签解密后路由返回加密结果,python服务解密得到明文 请求加密 生成随机字符 s,[a-z][A-z][0-9] 16位 ,例如:s=2zQ6E ...

  5. [置顶]定向爬虫 - Python模拟新浪微博登录

    当我们试图从新浪微博抓取数据时,我们会发现网页上提示未登录,无法查看其他用户的信息. 模拟登录是定向爬虫制作中一个必须克服的问题,只有这样才能爬取到更多的内容. 实现微博登录的方法有很多,一般我们在模 ...

  6. 微博登录记录pythonurllib_定向爬虫 - Python模拟新浪微博登录

    当我们试图从新浪微博抓取数据时,我们会发现网页上提示未登录,无法查看其他用户的信息. 模拟登录是定向爬虫制作中一个必须克服的问题,只有这样才能爬取到更多的内容. 实现微博登录的方法有很多,一般我们在模 ...

  7. 模拟新浪微博登录:从原理分析到实现

    上一篇文章小试牛刀:使用Python模拟登录知乎介绍了如何模拟知乎登录,虽然用到了验证码信息,但请求的参数都是原封不动的传递,刚开始接触的时候,觉得难度适中,回头再看的时候,反而感觉挺容易的.在这篇文 ...

  8. 模拟新浪微博登录-原理分析到实现

    原文地址:http://www.csuldw.com/2016/11/10/2016-11-10-simulate-sina-login/ 上一篇文章 小试牛刀:使用Python模拟登录知乎 介绍了如 ...

  9. spirngmvc如何实现直接输入网页重定向到登录_Python 模拟新浪微博登录

    点击上方"小猿学 Python",选择"置顶公众号" 作者:北岛知寒 链接:https://www.cnblogs.com/crazyacking/p/5232 ...

最新文章

  1. mysql查询表的数据大小
  2. python对文件夹内文件去重
  3. wxWidgets随笔(4)-hello,world
  4. linux fastQC 操作命令,[Bio-Info]fq文件解析统计工具:FastQC在linux下初应用
  5. Druid 分析报表中的实战(一)
  6. 手把手教你写DI_0_DI是什么?
  7. 功能强大的国外商业PHP在线教育系统LMS源码/直播课程系统
  8. 取代cookie的网站追踪技术:”帆布指纹识别”初探
  9. mysql int类型为null_MySQL INT类型可以为非零NULL吗?
  10. 数据预处理第7讲:具有离群点数据的缩放方法比较
  11. 145. PHP header status code
  12. mysan用的什么树mysql_Mysql储存引擎MyISAM和InnoDB中B+树索引的区别
  13. 爽爆!阿里腾讯都在传的MySQL精华手册,GitHub标星89K
  14. Linux中查看文件夹大小的命令
  15. B站 下载版权保护视频
  16. 信息安全基础练习题(看完包过)
  17. SOEN 287: Web Programming
  18. linux服务器怎么做快照,云服务器怎么创建快照
  19. 白鹭引擎egert+PHP后端手游宠物小精灵题材源码
  20. 简述防火墙--未知危险的屏障

热门文章

  1. linux系统证书存储,Linux系统下如何配置Nginx的SSL安全证书
  2. MATLAB的VLFeat工具箱
  3. python饼状图教程_Python数据可视化:饼状图的实例讲解
  4. 产品认知:产品经理需要具备哪些核心竞争力?
  5. java二叉树删除子树_132-BST删除有一颗子树的结点
  6. Extjs tree树的生成
  7. umi config.js整体defineConfig配置
  8. jQuery 遍历 each()方法
  9. angular 拼接html 事件无效
  10. springmvc mybatis 做分页sql 语句