Qt模拟用户名密码登录网站

Andy_baby 2015-02-04 11:02:40
win7 64bit vs2010 Qt4.8.4 模拟用户名密码登录网站,并获取cookie再发送请求,获取返回值

cpp文件
主要涉及的函数
#AccessHttp::AccessHttp(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::AccessHttp)//,network_cookie_(this)
{
ui->setupUi(this);
firstUserList = 1; //用户列表第一次请求第一条记录默认为1
lastUserList = 50; //用户列表第一次请求最有一条条记录默认为50
userListCnt = 1; //用户列表累计请求的次数默认为1
netManager = new QNetworkAccessManager(this);
network_cookie_ = new NetworkCookie(this);
//netManager->setCookieJar(cookieJar); //获取cookie值
netManager->setCookieJar(network_cookie_);
connect(netManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
}


//GET
void AccessHttp::do_get(QString url, QString content)
{

QString absUrl;
absUrl = url.append(content);

qDebug()<<" absUrl"<<absUrl;
QNetworkRequest req;



req.setUrl(QUrl(absUrl));

// req.setHeader(QNetworkRequest::CookieHeader,"sid=90vfV9fBTKShz6rugMH6iQ");
// netManager->get(req);
netManager->get(req);
// QList<QNetworkCookie> networkCookieList = cookieJar()->cookiesForUrl(req.url());

}


void AccessHttp::do_get_cookie(QString url, QString content)
{
QString absUrl;
absUrl = url.append(content);
QNetworkRequest req;
req.setUrl(QUrl(absUrl));
// G_sid="sid=PKTbgfodRcyHLRBQuMX+rg";
//req.setHeader(QNetworkRequest::CookieHeader,G_sid);
//req.setRawHeader("Cookie",G_sid.toAscii());
netManager->get(req);
}

//获取cookie信息
void AccessHttp::getCookie( QString &usr, QString &pwd)
{
QString usrname = usr;
QString password = MD5Encryption(pwd);
QString url = "http://127.0.0.1:13180";
QString content = QString("/request_userlogin?username=%1&userpassword=%2&code= HTTP/1.1").arg(usrname).arg(password);

QString sumUrl = url.append(content);
qDebug()<<"sumUrl "<<sumUrl;
//ui->webView->load(sumUrl);
do_get(url,content);

QTime dieTime = QTime::currentTime().addMSecs(1000);
while( QTime::currentTime() < dieTime )
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
QString cookieStr;
QList<QNetworkCookie> cookies = network_cookie_->getCookies();

for (int i = 0; i < cookies.count(); ++i)
cookieStr.append(cookies.at(i).toRawForm());

QStringList strList = cookieStr.split(";");
G_sid = strList.at(0);

qDebug()<<"cookieStr "<<cookieStr<<"G_sid"<<G_sid;
netManager->cookieJar()->setCookiesFromUrl(cookies,QUrl(url));
}


//获取用户列表函数
void AccessHttp::getUserList()
{
sflag = 1;
QString url = "http://127.0.0.1:13180";
QString arg1,arg2,arg3;

getRandomNum(); //构造随机数
//arg1 = randomStr;
arg2 = QString::number(firstUserList);
arg3 = QString::number(lastUserList);
QString content = QString("/request_userlist?mid=%1&startnum=%2&needcount=%3 HTTP/1.1").arg(randomStr).arg(arg2).arg(arg3);
do_get_cookie(url,content);

firstUserList = firstUserList+50;
lastUserList = lastUserList +50;
}

void AccessHttp::replyFinished(QNetworkReply *reply)
{

replyInfoStr.clear(); //清空原来的返回值
QByteArray bytes = reply->readAll(); // bytes
int len = 0;
len= bytes.length();
qDebug()<<"&&&&&&&&&&&&&&&&&&&"<<bytes.length();

QString string = QString::fromUtf8(bytes);
qDebug()<<"&&&&&&&&&&&&&&&&&string id "<<string;
//replyInfoStr = string;
//analyseData(replyInfoStr,sflag);
reply->deleteLater();
}



我的mian文件
#include <QtGui/QApplication>
#include "accesshttp.h"
#include <QWaitCondition>
#include <QTime>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
AccessHttp w;
QString name = "100001";
QString password = "admin";

w.getCookie(name,password); //模拟登录并获取cookie
w.getUserList(); //问题所在函数,获取用户列表
// w.getUserList();
w.hide();

return a.exec();
}

我模拟登录时没有问题的,并且能成功获取cookie,并加入netManager
GET /request_userlogin?username=100001&userpassword=21232f297a57a5a743894a0e4a801fc3&code= HTTP/1.1
X-Requested-With: XMLHttpRequest
Accept: */*
Referer: http://127.0.0.1:13180/
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Host: 127.0.0.1:13180
Connection: Keep-Alive

其中100001时用户名,密码是base64编码,这个我能成功登录没问题

接下来发送的请求时
GET /request_userlist?mid=0796156337802721&startnum=1&needcount=50 HTTP/1.1
X-Requested-With: XMLHttpRequest
Accept: */*
Referer: http://127.0.0.1:13180/
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Host: 127.0.0.1:13180
Connection: Keep-Alive
Cookie: sid=Y05KK88fQ2296FqWjEKgzg
mid是随机构造的一个随机数,没有什么特别要求,startnum=1&needcount=50 每次累加50,表示每次请求50条记录,正确的获取应该是类似于{"data":[{"name":"","userid":"1","ver":"wan","isbm":"0","parentid":"","mac":"00:FF:4B:28:A9:C5","lanips":"192.168.0.58","wanip":"192.168.0.58","computername":"lenovo-PC","domain":"lenovo-PC","os":"Windows 7 (6.1 Build 7600),0","loginuser":"lenovo","lanport":"13145","wanport":"0","logintime":"2015-02-04 10:09:53","backupserverid":"","version":"2.0","realmac":"88:9F:FA:61:56:38","iszx":1,"auth":1},{"name":"","userid":"2","ver":"wan","isbm":"0","parentid":"","mac":"08:00:27:AA:35:8C","lanips":"192.168.0.95","wanip":"192.168.0.95","computername":"frr_win81","domain":"frr_win81","os":"Windows 8 (6.2 Build 9200),0","loginuser":"frr_win8","lanport":"13145","wanport":"0","logintime":"2015-01-27 14:27:07","backupserverid":"","version":"2.0","realmac":"08:00:27:AA:35:8C","iszx":0,"auth":1}],"isend":1,"qyid":100001}
我获取的值是"{"data":[],"isend":0,"qyid":100001}" ,isend表示请求还未结束,可是不论我请求多少次都是这个结果!请问我有哪里弄错了!



...全文
1593 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
NightMare_Qi 2016-07-10
  • 打赏
  • 举报
回复
麻烦问一下,这个函数setRawHeader可以用来自定义头部吗?比如我想在头部加经度纬度信息等
Naturespeaker 2016-06-02
  • 打赏
  • 举报
回复
楼主求代码,困这很久了。。 T_T T_T_T
Zip Zou 2015-05-06
  • 打赏
  • 举报
回复
请问我有个抓包,我能够登录,但是页面有跳转,这种怎么解决?
Andy_baby 2015-02-21
  • 打赏
  • 举报
回复
另外,的确是滴,使用libcurl的确很方便!可能如果使用Qt creator 而vs编译器的话变异dll会麻烦点,但是的确好用!两者都实践下,受益匪浅!过完年我上传自己写的代码啊!
Andy_baby 2015-02-06
  • 打赏
  • 举报
回复
哈哈,我自己的问题我自己回答吧,问题在我具体发送的请求里,哈哈,太挫了,也因为去http不懂啦,"/request_userlogin?username=%1&userpassword=%2&code= HTTP/1.1",比如这个请求,我所有的请求都多了HTTP/1.1这个字符串,哈哈,我就直接copy的httpwatch的请求!哈哈,问题解决了,等有空了,把我自己完整的程序上传,让大家可以下载看下,网上Qt模拟请求登录网站的资料实在是太少了!
赵4老师 2015-02-04
  • 打赏
  • 举报
回复
必要时就得抓包。
帅得不敢出门 2015-02-04
  • 打赏
  • 举报
回复
模拟http其实用curl很方便啊。
Andy_baby 2015-02-04
  • 打赏
  • 举报
回复
我模拟的是我们公司自己网页发送的请求所以请求发送的是一定没问题!

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧