QNetworkAccessManager之http的同步请求

QByteArray HttpUtil::getData(QNetworkRequest request /*= QNetworkRequest()*/, const QByteArray & data /*= QByteArray()*/)
{
	m_networkReply = m_networkAccessManager->get(request);
	connect(m_networkAccessManager, &QNetworkAccessManager::sslErrors,
		this, &HttpUtil::onSslErrors);

	QEventLoop eventLoop;
	connect(m_networkReply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
	eventLoop.exec();
	QVariant httpStatusCode =
		m_networkReply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
	QVariant redirectionTargetUrl =
		m_networkReply->attribute(QNetworkRequest::RedirectionTargetAttribute);
	qDebug() << "m_networkReply->error()" << m_networkReply->error();

	if (m_networkReply->error() == QNetworkReply::NoError)
	{
		QString rlt;

		typedef QPair<QByteArray, QByteArray> RawHeaderPair;
		QList<RawHeaderPair> rawHeaderPair = m_networkReply->rawHeaderPairs();
		int totlalLength = m_networkReply->rawHeader("Content-Length").toInt();

		QByteArray  fileName = m_networkReply->rawHeader("Content-Disposition");

		QString stringFileName = QString::fromUtf8(fileName);

		qDebug() << "stringFileName###:" << stringFileName;
		int reciveLength = 0;
		while (true)
		{
			QByteArray byteArray = m_networkReply->readAll();
			QString rlt = QString::fromUtf8(byteArray);
			qDebug() << "rlt###:" << rlt;
			reciveLength += byteArray.count();

			bool isFinish = m_networkReply->isFinished();
			qDebug() << "isFinish#:" << isFinish;

			if (m_networkReply->isFinished())
			{
				qDebug() << QStringLiteral("下载数据完成的。");
				return byteArray;
			}
			if (totlalLength == reciveLength)
			{
				qDebug() << "length == reciveLength:";
				qDebug() << QStringLiteral("下载数据完成的。");
				return byteArray;
			}
		}
		m_networkReply->deleteLater();
	}
	return QByteArray();
}

猜你喜欢

转载自blog.csdn.net/weixin_42101997/article/details/84333986