1
0
mirror of https://gitee.com/drabel/LibQQt.git synced 2025-01-04 10:18:44 +08:00
LibQQt/test/LearnCookieTest/mainwindow.cpp
2018-03-03 15:27:28 +08:00

298 lines
10 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <GumboQueryDocument.h>
#include <GumboQuerySelection.h>
#include <GumboQueryNode.h>
#include <QStringList>
#include <QTextCodec>
MainWindow::MainWindow ( QWidget* parent ) :
QMainWindow ( parent ),
ui ( new Ui::MainWindow )
{
ui->setupUi ( this );
m_webmanager = new QQtWebAccessManager ( this );
connect ( m_webmanager, SIGNAL ( replyFinished ( QQtWebAccessSession* ) ),
this, SLOT ( replyFinished ( QQtWebAccessSession* ) ) );
m_webmanager->setCookieJar ( &cookiejar );
sendInitPage();
}
MainWindow::~MainWindow()
{
delete ui;
}
QList<QNetworkCookie> MainWindow::getLoginCookies()
{
QUuid uuid = QUuid::createUuid ( );
QString uuidStr = uuid.toString();
uuidStr.remove ( '-' ).remove ( '{' ).remove ( '}' );
uuidStr = uuidStr.toUpper();
//pline() << uuidStr;
const int size = 3;
QNetworkCookie cookies[size] =
{
QNetworkCookie ( "orgId", "1" ),
QNetworkCookie ( "orgName", "%25u8D44%25u9633%25u5E02%25u536B%25u8BA1%25u59D4" ),
QNetworkCookie ( "userName", "ss_admin" )
};
QList<QNetworkCookie> cookieList;
for ( int i = 0; i < size; i++ )
cookieList.push_back ( cookies[i] );
return cookieList;
}
QList<QNetworkCookie> MainWindow::getSessionCookies()
{
QUuid uuid = QUuid::createUuid ( );
QString uuidStr = uuid.toString();
uuidStr.remove ( '-' ).remove ( '{' ).remove ( '}' );
uuidStr = uuidStr.toUpper();
//pline() << uuidStr;
static QString myuuidstr = uuidStr;
const int size = 4;
QNetworkCookie cookies[size] =
{
QNetworkCookie ( "JSESSIONID", myuuidstr.toLocal8Bit().constData() ),
QNetworkCookie ( "orgId", "1" ),
QNetworkCookie ( "orgName", "%25u8D44%25u9633%25u5E02%25u536B%25u8BA1%25u59D4" ),
QNetworkCookie ( "userName", "ss_admin" )
};
QList<QNetworkCookie> cookieList;
for ( int i = 0; i < size; i++ )
cookieList.push_back ( cookies[i] );
return cookieList;
}
void MainWindow::sendInitPage()
{
QString url =
"http://124.161.179.36:8080/index/";
req.setUrl ( QUrl ( url ) ); //
m_webmanager->sendGetRequest ( req );
}
void MainWindow::sendGetLoginPage()
{
QString url =
"http://124.161.179.36:8080/index/ssologin.action";
req.setUrl ( QUrl ( url ) ); //
m_webmanager->sendGetRequest ( req );
}
void MainWindow::sendLoginRequest()
{
req.setRawHeader ( "User-Agent",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.4" );
req.setRawHeader ( "Accept-Encoding", "gzip, deflate" );
req.setRawHeader ( "Accept-Language", "zh-cn" );
req.setRawHeader ( "Connection", "keep-alive" );
req.setRawHeader ( "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8" );
req.setRawHeader ( "DNT", "1" );
req.setRawHeader ( "Origin", "http://124.161.179.36:8080" );
req.setRawHeader ( "Host", "124.161.179.36:8080" );
req.setRawHeader ( "X-Requested-With", "XMLHttpRequest" );
req.setRawHeader ( "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" );
req.setRawHeader ( "Upgrade-Incecure-Requests", "1" );
// req.setRawHeader ( "Referer",
// "http://124.161.179.36:8080/sso/login?service=http%3A%2F%2F124.161.179.36%3A8080%2Findex%2Fssologin.action" );
QList<QNetworkCookie> cookieList = getLoginCookies();
QListIterator<QNetworkCookie> itor ( cookieList );
while ( itor.hasNext() )
{
QNetworkCookie cookie = itor.next();
cookiejar.insertCookie ( cookie );
}
// QVariant cookieVar;
// cookieVar.setValue ( cookiejar.cookiesForUrl() );
// req.setHeader ( QNetworkRequest::CookieHeader, cookieVar );
QString url =
"http://124.161.179.36:8080/sso/login?service=http%3A%2F%2F124.161.179.36%3A8080%2Findex%2Fssologin.action";
req.setUrl ( QUrl ( url ) ); //
req.setRawHeader ( "Content-Length", "124" );
QByteArray data;
data = "isJgChecked=on&orgid=1&username=ss_admin&isZhChecked=on&lt=e2s2&_eventId=submit&rememberMe=1&password=MTExMTEx&imageCode=954";
m_webmanager->sendPostRequest ( req, data );
}
void MainWindow::sendYaowuRequest()
{
req.setRawHeader ( "Accept", "application/json, text/javascript, */*; q=0.01" );
req.setRawHeader ( "Referer", "http://124.161.179.36:8080/index/ssologin.action" );
QString url =
"http://124.161.179.36:8080/index/dictionaryItem/queryItemTreeListByCode.action?dictionaryCode=DIC_GBT2260_2007&itemCode=null";
QByteArray cookieBytes =
"JSESSIONID=40E28196F1766BDEC15F6B11B465E8EE; orgId=1; orgName=%25u8D44%25u9633%25u5E02%25u536B%25u8BA1%25u59D4; userName=ss_admin";
req.setRawHeader ( "Referer", "http://124.161.179.36:8080/dictionary-manage/yptym/totymzdmx.action" );
url = QString ( "http://124.161.179.36:8080/dictionary-manage/yptym/queryZDMXList.action" );
cookieBytes =
"JSESSIONID=03D49123CB34BDBEA60E2F36C23118C9; orgId=1; orgName=%25u8D44%25u9633%25u5E02%25u536B%25u8BA1%25u59D4; userName=ss_admin";
//登陆
cookieBytes =
"JSESSIONID=74F47D80C4681A4E3E1509018AE68747; orgId=1; orgName=%25u8D44%25u9633%25u5E02%25u536B%25u8BA1%25u59D4; userName=ss_admin";
//mReq.setRawHeader ( "Referer", "http://124.161.179.36:8080/dictionary-manage/yptym/totymzdmx.action" );
url = QString ( "http://124.161.179.36:8080/sso/login?service=http%3A%2F%2F124.161.179.36%3A8080%2Fdictionary-manage%2Findex.action" );
cookieBytes =
"";
QList<QNetworkCookie> cookieList = getSessionCookies();
//pline() << cookieList;
QVariant cookieVar;
cookieVar.setValue ( cookieList );
req.setUrl ( QUrl ( url ) ); //
//mReq.setHeader ( QNetworkRequest::CookieHeader, cookieVar );//
//cookiejar.setCookiesFromUrl ( cookieList, url );
}
void MainWindow::replyFinished ( QQtWebAccessSession* session )
{
QNetworkReply* reply = session->getWebAccessReply();
//pline() << reply->readAll();
pline() << "请求的网址" << reply->url().toString();
QList<QNetworkCookie> cookies = m_webmanager->cookieJar()->cookiesForUrl ( reply->url() );
//=外部设置的CookieJar
//pline() << "内部cookie" << cookies;
cookies = cookiejar.cookiesForUrl ( reply->url() );
static QList<QNetworkCookie> staticCookieList = cookies;
if ( staticCookieList != cookies )
{
pline() << "cookies 在这次请求返回后被更换了";
staticCookieList = cookies;
}
pline() << "我本地存储的cookie" << cookies;
//经过测试QNetworkCookieJar可以保存多个网址的cookie组。
// pline() << "cookie for " << "http://124.161.179.36:8080/index/ssologin.action" <<
// m_webmanager->cookieJar()->cookiesForUrl (
// QUrl ( "http://124.161.179.36:8080/index/ssologin.action" ) );
int nHttpCode = reply->attribute ( QNetworkRequest::HttpStatusCodeAttribute ).toInt(); //http返回码
if ( nHttpCode == 200 ) //成功
{
pline() << "success";
}
else if ( nHttpCode == 302
|| nHttpCode == 301 )
{
QString redirect = reply->attribute ( QNetworkRequest::RedirectionTargetAttribute ).toString();
pline() << "redirect" << "重定向url是" << redirect;
req.setRawHeader ( "Content-Length", "0" );
// QVariant var;
// var.setValue ( cookieList );
// req.setHeader ( QNetworkRequest::CookieHeader, var );
if ( redirect.contains ( "http" ) )
req.setUrl ( QUrl ( redirect ) );
else
{
req.setUrl ( QUrl ( "http://124.161.179.36:8080" + redirect ) );
}
m_webmanager->sendGetRequest ( req );
return;
}
else
{
pline() << nHttpCode << "fail";
return;
}
QByteArray resultContent = reply->readAll();
//pline() << QString ( resultContent );
QString result1 = resultContent;
//pline() << result1.toLatin1().constData();
pline() << QTextCodec::codecForHtml ( resultContent )->name();
QString codecName = QTextCodec::codecForHtml ( resultContent )->name();
/*用页面源文件的编码来进行解码 GB2312 or UTF-8*/
QTextCodec* pCodec = QTextCodec::codecForName ( "UTF-8" );
QString strResult = pCodec->toUnicode ( resultContent );
//pline() << strResult;
QTextCodec* pCodec2 = QTextCodec::codecForName ( "UTF-8" );
QByteArray resultContent2 = pCodec2->fromUnicode ( strResult );
QString result2 = resultContent2;
//pline() << result2;
pline() << QTextCodec::codecForLocale()->name();
pline() << result2;
//获取初始页面成功,开始获取登录页面
if ( result2.contains ( "0;url=ssologin.action" ) )
{
sendGetLoginPage();
return;
}
//获取登录页面成功,需要获取验证码,使用用户名密码开始登录请求。
else if ( result2.contains ( "!--登录框start--" ) )
{
//这里是登陆的最后一步,也是关键一步,但是没有实现。这个函数里面,验证码是错误的,所以登录失败,再一次进入相同页面。
//关于地址服务器IP 端口
//关于用户名密码,加密的密码。(抓包软件抓到的那种。)
//关于验证码没有实现读取所以实现到这里就停下了。但是使用cookie进行通信的过程顺序理清楚了。
//这个程序的重点在于学习http带cookie的工作过程。
sendLoginRequest();
return;
}
QTextCodec* pCodec3 = QTextCodec::codecForName ( "GBK" );
QByteArray resultContent3 = pCodec3->fromUnicode ( resultContent2 );
QString result3 = resultContent3;
QFile file ( "/Users/abel/Desktop/cc.html" );
file.open ( QFile::WriteOnly );
file.write ( result1.toLocal8Bit().constData() );
file.close();
return;
GumboQueryDocument doc;
doc.parse ( result2.toLocal8Bit().constData() );
GumboQuerySelection s = doc.find ( "table" );
GumboQueryNode pNode = s.nodeAt ( 0 );
QString txt = QString::fromStdString ( pNode.text() );
//pline() << txt;
QStringList tList = txt.split ( "\n", QString::SkipEmptyParts );
}
void MainWindow::on_pushButton_clicked()
{
}