为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

模拟新浪微博登录过程

2013-11-21 6页 doc 32KB 68阅读

用户头像

is_865278

暂无简介

举报
模拟新浪微博登录过程模拟新浪微博登录 一般模拟网页登录,只需要通过HTTP抓包工具观察post的数据,然后跟浏览器一样填写参数,发送POST请求即可。 登录新浪微博网页时,需要在POST之前先GET一组参数,然后用这些参数在客户端用js预先对用户名、密码都进行加密,这些将作为POST_DATA的一部分。 1、 在提交POST请求之前,需要GET获取四个参数(servertime,nonce,pubkey和rsakv)。 1.1 由于加密方式的改变,我们这里将使用到RSA模块,有关RSA公钥加密算法的介绍可以参考网络中的有关内容。下载并安...
模拟新浪微博登录过程
模拟新浪微博登录 一般模拟网页登录,只需要通过HTTP抓包工具观察post的数据,然后跟浏览器一样填写参数,发送POST请求即可。 登录新浪微博网页时,需要在POST之前先GET一组参数,然后用这些参数在客户端用js预先对用户名、密码都进行加密,这些将作为POST_DATA的一部分。 1、 在提交POST请求之前,需要GET获取四个参数(servertime,nonce,pubkey和rsakv)。 1.1 由于加密方式的改变,我们这里将使用到RSA模块,有关RSA公钥加密算法的介绍可以参考网络中的有关内容。下载并安装rsa模块: 下载:https://pypi.python.org/pypi/rsa/3.1.1 1.2 获得以及查看新浪微博登录js文件 查看新浪通行证url (http://login.sina.com.cn/signup/signin.php)的源代码,其中可以找到该js的地址 http://login.sina.com.cn/js/sso/ssologin.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.5)' % 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、 需要获得全局的session id http://beacon.sina.com.cn/a.gif?V=2.2.2&CI=sz:1280x800|dp:24|ac:Mozilla|an:Netscape|cpu:Windows%20NT%206.1;%20WOW64|pf:Win32|jv:1.3|ct:unkown|lg:zh-CN|tz:-8|fv:11|ja:0&PI=pid:0-9999-0-0-1|st:0|et:2|ref:http%3A//weibo.com/a/download|hp:unkown|PGLS:|ZT:|MT:|keys:|dom:116|ifr:0|nld:|drd:|bp:0|url:&UI=vid:2251290246805.8506.1373081138131|sid:7497590948214.982.1373081549287|lv:1373081138139:2:2:2|un:|uo:,,login.sina.com.cn|ae:&EX=ex1:WEIBO-V5|ex2:&gUid_1373082601718 按新浪的方式请求之即可,不需要返回内容 3、 获取加密后的username和pass username 经过BASE64计算: username_ = urllib.quote(username) username = base64.encodestring(username)[:-1] 之前,password经过三次SHA1加密,且其中加入了 servertime 和 nonce 的值来干扰。即:两次SHA1加密后,结果加上servertime和nonce的值,再SHA1算一次。 后来,最新的password加密方式和原来有所不同: 3.1 先创建一个rsa公钥,公钥的两个参数新浪都给了固定值,不过给的都是16进制的字符串,第一个参数是登录第一步中的pubkey,第二个参数是js加密文件中的‘10001’。 这两个值需要先从16进制转换成10进制。代码如下: rsaPublickey = int(pubkey, 16) key = rsa.PublicKey(rsaPublickey, int('10001', 16)) #创建公钥 message = str(servertime) + '\t' + str(nonce) + '\n' + str(password) #拼接 passwd = rsa.encrypt(message, key) #加密 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)’ 需要发送的报头信息 postPara = { 'entry': 'weibo', 'gateway': '1', 'from': '', 'savestate': '7', 'userticket': '1', 'ssosimplelogin': '1', 'vsnf': '1', 'vsnval': '', 'su': encodedUserName, 'service': 'miniblog', 'servertime': serverTime, 'nonce': nonce, 'pwencode': 'rsa2', 'sp': encodedPassWord, 'encoding': 'UTF-8', 'prelt': '115', 'rsakv' : rsakv, 'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack', 'returntype': 'META' } 请求的内容中添加了rsakv,将pwencode的值修改为rsa2,其他跟以前一致。 将参数组织好,POST请求。检验是否登录成功,可以参考POST后得到的内容中的一句 location.replace("http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=101&reason=%B5%C7%C2%BC%C3%FB%BB%F2%C3%DC%C2%EB%B4%ED%CE%F3"); 如果retcode=101则表示登录失败。登录成功后结果与之类似,不过retcode的值是0。 3、登录成功后,获得Cookie,就可以像浏览器一样去请求想要的数据了。
/
本文档为【模拟新浪微博登录过程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索