HTTP请求中的Qt
-
26-09-2019 - |
题
我是新的 Qt的即可。我安装的Qt为VS2008和我的 VS2010 集成。我只是想知道如何使HTTP请求。我读过有关的 QtNetwork 但是QtHttp是已废弃。
我也知道关于的libcurl 和 curlpp ,但我有安装它,并使其与Qt的工作问题。
你有什么建议,请 QtNetwork 或 curlpp ?如果 QtNetwork ,可以请你给我一个样本函数或一段代码(什么类使用)。如果 curlpp(libcurl中),可以请你点我的地方在哪里可以找到安装它的步骤的Qt (或善意解释)?
非常感谢你。
解决方案
的libcurl 和 curlpp 的是伟大的图书馆,但使用起来增加了一个依赖于你的项目,可能就可以避免。
的Qt的最新版本建议使用 QNetworkAccessManager
使网络请求(包括http请求)并接收回复。
要下载文件的最简单的可能的方式是:
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("http://stackoverflow.com")));
当的replyFinished
槽被调用时, QNetworkReply
对象,它需要作为参数将包含所下载的数据以及元数据(标题,等)。
一个更完整的示例可以在Qt的例子发现,可以读这里它的源代码。
其他提示
朱塞佩是正确的,你不需要使用的的libcurl 的 curlpp 的和类似的库。 有没有必要的,Qt拥有一个简单和工人阶级在它自己的。
记请在发送请求和检索答复的标准方法是异步的。 你总是要管理者完成(QNetworkReply *)信号连接到一个插槽中。
如果您发送多个请求,并且不希望添加插槽每次回复,你总是可以运行一个事件循环,并连接经理发信号给事件循环退出()插槽。
像这样:
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QEventLoop *eventLoop = new QEventLoop();
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), eventLoop, SLOT(quit());
manager->get(QNetworkRequest(QUrl("http://stackoverflow.com")));
eventLoop->exec(QEventLoop::ExcludeUserInputEvents);
QByteArray replyData = reply->readAll();
... //do what you want with the data your receive from reply
顺便说一下。不知道你在做什么。但是,如果它是一个移动应用程序,我建议你从VS切换到QtCreator IDE。它有一个很好模拟器和用于移动设备测试的完整工具链。