首页 > 代码库 > Qt实现同步(阻塞式)http get等网络访问操作

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等网络访问操作