見下源碼(xxx爲屏蔽內容):
QNetworkAccessManager *m_manager = new QNetworkAccessManager(this);
QString AppEn_Url = "http://xxxx.xxxx.xxxxx.com:80/web/login.do"; //服務器地址
QNetworkRequest netRequest;
netRequest.setRawHeader("Host", "xxxx.xxxx.xxxx.com");
netRequest.setRawHeader("Connection", "keep-alive");
netRequest.setRawHeader("Cache-Control", "max-age=0");
netRequest.setRawHeader("Origin", "http://xxxx.xxxx.xxxx.com");
netRequest.setRawHeader("Upgrade-Insecure-Requests", "1");
netRequest.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
netRequest.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36");
netRequest.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");
netRequest.setRawHeader("Referer", "http://xxxx.xxxx.xxxx.com/web/auth/xxxxx.jsp?authtype=xxxxxx");
netRequest.setRawHeader("Accept-Encoding", "gzip, deflate");
netRequest.setRawHeader("Accept-Language", "zh-CN,zh;q=0.9");
QString strJSESSIONID = QUuid::createUuid().toString().replace("{", "").replace("}", "").replace("-", "");
QByteArray JSESSIONID;
JSESSIONID.append("Secure; JSESSIONID=");
JSESSIONID.append(strJSESSIONID);
netRequest.setRawHeader("Cookie", JSESSIONID);
netRequest.setUrl(QUrl(AppEn_Url));
//拼json內容
QJsonObject obj;
obj.insert("type", xxx);
obj.insert("userName", "xxxx");
obj.insert("idNo", "330226xxxxxxxx3691");
obj.insert("dataSource", xxx);
obj.insert("mobile", "136xxxxxxxx");
QJsonDocument jsonDoc(obj);//QJsonObject轉QJsonDocument
QString str = QString(jsonDoc.toJson());//QJsonDocument轉QString
QString j_password = "330226xxxxxxxx3691";
//post內容
QString strPostdes = "j_username=" + QString(jsonDoc.toJson() ) + "&j_password=" + j_password;
qDebug() << strPostdes;
//發送
QNetworkReply *reply = m_manager->post(netRequest, strPostdes.toUtf8());
QByteArray responseData;
QEventLoop eventLoop;
QObject::connect(m_manager, SIGNAL(finished(QNetworkReply *)), &eventLoop, SLOT(quit()));
eventLoop.exec();
//返回結果
responseData = reply->readAll();
QString strResponse = QString::fromUtf8(responseData);
//解析json
QString res_data = "";
QString res_date = "";
QString res_unix = "";
QString res_microtime = "";
QString res_appsafecode = "";
QString res_sgin = "";
if (strResponse.startsWith("{\"response"))
{
QJsonParseError json_error;
QJsonDocument jsonDocument = QJsonDocument::fromJson(strResponse.toUtf8(), &json_error);
if(json_error.error == QJsonParseError::NoError)
{
if (jsonDocument.isObject())
{
QJsonObject objDocument = jsonDocument.object();
QJsonObject objResponse = objDocument["response"].toObject();
res_data = objResponse.take("data").toString();
res_date = objResponse.take("date").toString();
res_unix = objResponse.take("unix").toString();
res_microtime = objResponse.take("microtime").toString();
res_appsafecode = objResponse.take("appsafecode").toString();
res_sgin = objResponse.take("sgin").toString();
}
}
}
//url爲請求網址,content爲請求內容,即傳遞的參數,allcookies應該定義爲全局變量,這裏爲了演示,則定義爲局部變量
void MainWindow::PostLToNet(QString url, QString content)
{
QByteArray _content = content.toUtf8();
int _contentLength = content.length();
QNetworkRequest req;
req.setUrl(QUrl(url));
req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
req.setHeader(QNetworkRequest::ContentLengthHeader, _contentLength);
QNetworkAccessManager nManager;
QNetworkReply *getreply = nManager.post(req, _content);
QEventLoop loop;
//下載完成後,直接退出子進程
connect(getreply, SIGNAL(finished()), &loop, SLOT(quit()));
//子進程開始運行
loop.exec();
//讀取所有獲取到的網頁內容
QTextCodec *codec = QTextCodec::codecForName("utf8");//使用utf8編碼,這樣纔可以顯示中文
QString data = codec->toUnicode(getreply->readAll()); //獲取網頁的所有數據
QList<QNetworkCookie> allcookies = nManager.cookieJar()->cookiesForUrl(QUrl(url)); //獲取url的所有cookies
}
//根據獲取的cookies直接獲取murl網址指定的信息
QString MainWindow::GetToAllNet(QString murl)
{
//轉換cookies成QVariant 把上次得到的cookies 設置到下次訪問的地址
QVariant var;
var.setValue(allcookies);
//設置QNetworkRequest的網址和cookies
QNetworkRequest req;
req.setUrl(QUrl(murl));
req.setHeader(QNetworkRequest::CookieHeader, var);
//通過QNetworkAccessManager對象獲取網頁內容
QNetworkAccessManager nManager;
QNetworkReply *getreply = nManager.get(req);
//創建一個子進程,以便於提供時間給QNetworkAccessManager對象下載完網頁內容
QEventLoop loop;
//下載完成後,直接退出子進程
connect(getreply, SIGNAL(finished()), &loop, SLOT(quit()));
//子進程開始運行
loop.exec();
//讀取所有獲取到的網頁內容
QTextCodec *codec = QTextCodec::codecForName("utf8");//使用utf8編碼,這樣纔可以顯示中文
QString data = codec->toUnicode(getreply->readAll()); //獲取網頁的所有數據
return data;
}