Qt实现同步(阻塞式)http get等网络访问操作
Posted 骑单车的攻城狮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt实现同步(阻塞式)http get等网络访问操作相关的知识,希望对你有一定的参考价值。
Qt的网络操作类是异步(非阻塞的),但有时想做一些阻塞的事情就不方便了,可用如下几行代码轻松实现:
1 QByteArray MyNetworkAccess::get(const QString &strUrl) 2 { 3 assert(!strUrl.isEmpty()); 4 5 const QUrl url = QUrl::fromUserInput(strUrl); 6 assert(url.isValid()); 7 8 QNetworkRequest qnr(url); 9 QNetworkReply* reply = m_qnam.get(qnr); //m_qnam是QNetworkAccessManager对象 10 11 QEventLoop eventLoop; 12 connect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit); 13 eventLoop.exec(QEventLoop::ExcludeUserInputEvents); 14 15 return reply->readAll(); 16 }
当然如上方式不支持重定向(301等),因为暂时用不上,如果要支持,还要在return前判断并循环或递归。
另外如果出现error,现在的方式会把服务器返回的错误信息直接返回,后面再更新一版,支持判断错误的,敬请期待!
并且可以看出本来是封装了一个网络操作类,但现在只有get,post等还没做,等弄好了也一起放上来!
以上是关于Qt实现同步(阻塞式)http get等网络访问操作的主要内容,如果未能解决你的问题,请参考以下文章