见下源码(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;
}