[Qt] 百度post账号登录

百度贴吧链接:http://tieba.baidu.com/p/2632620446

抓包教程什么的就不说了(想要了解自行https://passport.baidu.com/v2/api/?login+HttpWatch),直接给post数据吧( ̄ε ̄*)


-> ppui_logintime=+五位随机数+&charset=utf-8&codestring=&token=+token+&isPhone=false&index=0&u=&safeflg=0&staticpage=http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fjump.html&loginType=1&tpl=mn&callback=parent.bdPass.api.login._postCallback&username=+URL格式ID+&password= +用户密码+ “&verifycode=&mem_pass=on

上面就是post数据,接下来我们要做的就是傻瓜式的写function实现各个参数↖( ̄▽ ̄")


1)首先就是产生一个五位伪随机数
用下列公式即可得到指定范围[m,n]的随机数
r = rand()%(n - m + 1) + m;
于是我们就可以写
int MainWindow::get_tieba_randnum()  //MainWindow是我定义的一个继承public QMainWindow的类
{
  int random_num=qrand() %(99999-10000+1)+10000;
  return random_num;
}


2)然后就是取token,方法就是访问这个链接
https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true
然后取token=到;中间的的字符串

先在MainWindow类的公有成员中定义一个取指定post网页内容的函数
   //这里定义QString url为需要取的网页链接,是因为我们后面还要用到这个函数判断是否post成功.
   QString get_tiebapage(QString url)
  {
     QNetworkAccessManager *manager = new QNetworkAccessManager();
     QNetworkReply *reply = manager->get(QNetworkRequest(QUrl(url)));
     QByteArray responseData;
     QEventLoop eventLoop;
     connect(manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
     eventLoop.exec();    
     responseData = reply->readAll();
     return QString(responseData);返回取到的网页内容..
  }

3)接下来就是关键取token了,之前我们已经获取了网页token的内容,所以这里需要做的就是分析网页然后取token
QString MainWindow::get_tieba_token()
{
QString UrlSource;
UrlSource=MainWindow::get_tiebapage(QString("https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true") ); //调用刚才的函数把获取的网页内容储存为一个qstring的变量
//下面就是匹配字符串(其实用正则更好)
int start = UrlSource.indexOf("tooken='", 0); 
int end = UrlSource.indexOf("=", start);
QString token = UrlSource.mid(start, end - start); 
return token; //返回获取的token
}

4)上面搞完了后我们就要获得用户id的url格式了

经过百度知道了百度的url是utf-8的,因此我们需要把用户输入的ID转化为utf-8然后再转化为url格式(貌似qt默认的就是utf-8)
QByteArray MainWindow::get_tieba_idurl(QString tieba_id)//QString tieba_id参数为用户id
{
QByteArray urlArray = QString(tieba_id).toUtf8(); //转化utf-8
QByteArray res = urlArray.toBase64(); //转化url码
return res; //返回url格式码
}


\("▔□▔)/这里我最开始以为QByteArray不支持append重载,抠脑半天经过高人指点才知道......于是就可以大胆的返回res了
QString & QString::append ( const QByteArray & ba )

This function overloads append(). Appends the byte array ba to this string. The given byte array is converted to Unicode using the fromAscii() function. 

You can disable this function by defining QT_NO_CAST_FROM_ASCII when you compile your applications. This can be useful if you want to ensure that all user-visible strings go through QObject::tr(), for example.


5)最后就是获取用户密码了

这里可以不用写函数了= =直接在最后连接这个url的时候用
QString password=ui->lineEdit->text();


然后我们就可以把上面取的信息连接为cookie,下面就是qurl访问网站的格式



QByteArray cooike="ppui_logintime=";
QString str2=" &charset=utf-8&codestring=&token=";
......
接下你懂的,就是把你获取的字符与4楼说的方法拼接为一个query string,然后把query string与前面的 https://passport.baidu.com/v2/api/?login 拼接为最终的连接,通过QUrl登录,再调用之前的那个取网页内容函数然后获取内容判断是否匹配error=0,如果是则成功 反之失败

然后,然后就结束了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值