《新浪微博自动评论软件·设计与实现之模拟登录篇》

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《新浪微博自动评论软件·设计与实现之模拟登录篇》相关的知识,希望对你有一定的参考价值。

微博登录分析

1、抓包分析

技术分享

                                                                                                                          图1

我们可能需要的数据如下:

General
Request URL:http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)

Request Headers
Host:login.sina.com.cn
Origin:http://weibo.com
Referer:http://weibo.com/
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/50.0.2661.94 Safari/537.36

Form Data
entry:weibo
gateway:1
from:
savestate:7
useticket:1
pagerefer:http://login.sina.com.cn/sso/logout.php?entry=miniblog&r=http%3A%2F%2Fweibo.com%2Flogout.php%3Fbackurl%3D%252F
vsnf:1
su:MTgzNjI5NzI5Mjg=
service:miniblog
servertime:1463956665
nonce:0PE9SX
pwencode:rsa2
rsakv:1330428213
sp:38af3d36bc7c044ce0adcc20dead2ff78c62b84d74cdbf12b7c57e912dd333923f30f48c2f560743cce362655fa9f1474dc9c67c7b915bba30a163c9c935ecab5cac6ca58aee2da6f42718bd28a80d78707a6cd6be2d0216a3701eae0a626ec1d20a590463f8f813e9663135aaf3f0810b7b27316b78bbf038a869bc01b52000
sr:1366*768
encoding:UTF-8
prelt:327
url:http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack
returntype:META

其中,黑体字表示该数据为固定数据,蓝体字表示该数据可变,但较稳定,红体字表示该数据每次登录都不相同,也即这些数据中除了su、sp、rsakv、servertime、nonce是经过js处理动态生成的,其它都是个固定值,可以在代码中写死,其实su,rsakv,servertime也可写死。怎么获得这些值呢?

2、查看json

我们还需要知道js是怎么处理我们填入的用户名及密码的, 即su与sp.
首先我们要在未登录状态到http://login.sina.com.cn/signup/signin.php?entry=sso 这个页面,并得到http://login.sina.com.cn/js/sso/ssologin.js 这个js文件.
查看ssologin.js的makeRequest函数, 原型如下:

  var makeRequest = function(username, password, savestate) {
    var request = {
      entry: me.getEntry(),
      gateway: 1,
      from: me.from,
      savestate: savestate,
      useticket: me.useTicket ? 1 : 0
    };
    if (me.failRedirect) {
      me.loginExtraQuery.frd = 1
    }
    request = objMerge(request, {
      pagerefer: document.referrer || ""
    });
    request = objMerge(request, me.loginExtraFlag);
    request = objMerge(request, me.loginExtraQuery);
    request.su = sinaSSOEncoder.base64.encode(urlencode(username));
    if (me.service) {
      request.service = me.service
    }
    if ((me.loginType & rsa) && me.servertime && sinaSSOEncoder && sinaSSOEncoder.RSAKey) {
      request.servertime = me.servertime;
      request.nonce = me.nonce;
      request.pwencode = "rsa2";
      request.rsakv = me.rsakv;
      var RSAKey = new sinaSSOEncoder.RSAKey();
      RSAKey.setPublic(me.rsaPubkey, "10001");
      password = RSAKey.encrypt([me.servertime, me.nonce].join("\\t") + "\\n" + password)
    } else {
      if ((me.loginType & wsse) && me.servertime && sinaSSOEncoder && sinaSSOEncoder.hex_sha1) {
        request.servertime = me.servertime;
        request.nonce = me.nonce;
        request.pwencode = "wsse";
        password = sinaSSOEncoder.hex_sha1("" + sinaSSOEncoder.hex_sha1(sinaSSOEncoder.hex_sha1(password)) + me.servertime + me.nonce)
      }
    }
    request.sp = password;
    try {
      request.sr = window.screen.width + "*" + window.screen.height
    } catch (e) {}
    return request
  }

#1:su,就是经过html字符转义再转成base64编码

#2:sp,weibo登录对密码有两种加密方式:rsa2与wsse,我们从图1的pwnencode=rsa2可知, js处理走的是这一部分逻辑(至于另一部分wsse是什么时候用到, 我不清楚)

 

以上是关于《新浪微博自动评论软件·设计与实现之模拟登录篇》的主要内容,如果未能解决你的问题,请参考以下文章

《新浪微博自动评论软件·设计与实现之关键字搜索篇》

《新浪微博自动评论软件·设计与实现之UI篇》

新浪微博热门评论爬虫采集

微博API开发

py3 调用微博api实现自动发布评论

定向爬虫 - Python模拟新浪微博登录