qt 模拟表单提交数据

32 篇文章 0 订阅
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();
}

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值