QByteArray HttpUtil::login(const QString url /*= QString()*/, const QString & mobile /*= QString()*/, const QString & password /*= QString()*/)
{
qDebug() << QStringLiteral("正在登录...");
m_Type = "login";
QNetworkRequest request;
QSslConfiguration config;
config.setPeerVerifyMode(QSslSocket::VerifyNone);
config.setProtocol(QSsl::TlsV1SslV3);
request.setSslConfiguration(config);
request.setUrl(QUrl(url));
request.setRawHeader("os", "windows");
request.setRawHeader("version", "1.0.0.0");
request.setRawHeader("appKey", "201820011141153");
request.setRawHeader("did", "PC-20181206");
std::string strText = QString("mobile=%1&password=%2").arg(mobile).arg(password).toStdString();
std::string strSecret = "661ee319dff061d4fb6532787f7b6wgl";
std::string result = CreateSignature(strText, strSecret);
request.setRawHeader("signature", result.c_str());
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart textPart;
textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"mobile\""));
textPart.setBody(mobile.toUtf8()); //电话号码
QHttpPart textPart2;
textPart2.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"password\""));
textPart2.setBody(password.toUtf8()); //密码
multiPart->append(textPart);
multiPart->append(textPart2);
QByteArray bytes = postData(request, multiPart);
return bytes;
}
QByteArray HttpUtil::postData(QNetworkRequest request /*= QNetworkRequest()*/, QHttpMultiPart * multiPart /*= QHttpMultiPart()*/)
{
qDebug() << "HttpUtil::getData...";
//m_networkReply = m_networkAccessManager->post(request, multiPart);
bool check = connect(m_networkReply, &QIODevice::readyRead, this, &HttpUtil::onReadyRead);
//bool check = connect(m_networkReply, &QNetworkReply::finished, this, &HttpUtil::onFinished);
//check = connect(m_networkAccessManager, &QNetworkAccessManager::sslErrors,
// this, &HttpUtil::onSslErrors);
//return QByteArray();
QTimer timer;
timer.setInterval(10000); // 设置超时时间10秒
timer.setSingleShot(true); // 单次触发
timer.start(); //启动定时器
QNetworkReply * networkReply = m_networkAccessManager->post(request, multiPart);
multiPart->setParent(networkReply);
QEventLoop eventLoop;
connect(&timer, &QTimer::timeout, &eventLoop, &QEventLoop::quit);
connect(networkReply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
eventLoop.exec();
if (timer.isActive())
{
timer.stop();
int code =
networkReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
QNetworkReply::NetworkError error = networkReply->error();
if (error == QNetworkReply::NoError)
{
QByteArray byteArray = networkReply->readAll();
QString string = QString::fromUtf8(byteArray);
if (networkReply->isFinished())
{
networkReply->deleteLater();
QVariantMap * vm = new QVariantMap();
vm->insert("type", m_Type);
vm->insert("data", byteArray);
vm->insert("result", Result::Ok);
emit readyRead(vm); //发送数据到 eventQueue
return byteArray;
}
}
else
{
qDebug() << QStringLiteral("网络请求错误,错位代码:") << networkReply->error();
}
}
else
{
disconnect(networkReply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
networkReply->abort();
networkReply->deleteLater();
qDebug() << QStringLiteral("网络请求超时...");
}
return QByteArray();
}