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();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值