网建网站,沈阳男科医院收费标准,泸州网站建设公司,app制作下载声明#xff1a;由于本人使用用的是Python语言#xff0c;以下内容就在该语言下进行解释说明。有使用Java语言的可以参考IT男杂记(http://marspring.mobi/http-client-weibo/)正文#xff1a;PC登录新浪微博时#xff0c;在客户端用js预先对用户名、密码都进行了加密#…声明由于本人使用用的是Python语言以下内容就在该语言下进行解释说明。有使用Java语言的可以参考IT男杂记(http://marspring.mobi/http-client-weibo/)正文PC登录新浪微博时在客户端用js预先对用户名、密码都进行了加密而且在POST之前会GET一组参数这也将作为POST_DATA的一部分。这样就不能用通常的那种简单方法来模拟POST登录(比如人人网)。通过爬虫获取新浪微博数据模拟登录是必不可少的。1、在提交POST请求之前需要GET获取四个参数(servertimenoncepubkey和rsakv)不是之前提到的只是获取简单的servertimenonce这里主要是由于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?entryssocallbacksinaSSOController.preloginCallBacksu%srsaktmodclientssologin.js(v1.4.4) % username使用get方法得到以下类似内容sinaSSOController.preloginCallBack({retcode:0,servertime:1362041092,pcid:gz-6664c3dea2bfdaa3c94e8734c9ec2c9e6a1f,nonce:IRYP4N,pubkey:EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443,rsakv:1330428213,exectime:1})进而从中提取到我们想要的servertimenoncepubkey和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 请求通行证urllogin_url ‘http://login.sina.com.cn/sso/login.php?clientssologin.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?framelogin1callbackparent.sinaSSOController.feedBackUrlCallBack,20 returntype: META21 }请求的内容中添加了rsakv将pwencode的值修改为rsa2其他跟以前一致。如果retcode101则表示登录失败。登录成功后结果与之类似不过retcode的值是0。3、登录成功后在body中的replace信息中的url就是我们下一步要使用的url。然后对上面的url使用GET方法来向服务器发请求保存这次请求的Cookie信息就是我们需要的登录Cookie了。