我是Qt新手。我为 VS2008 安装了 Qt 并与我的VS2010集成。我只想知道如何发出 HTTP 请求。我读过关于QtNetwork但 QtHttp 已过时。
我也知道libcurl和curlpp,但是我在安装它以及使它与 Qt 一起工作时遇到了问题。
你推荐什么,QtNetwork或curlpp?如果QtNetwork,请给我一个示例函数或一段代码(以及使用什么类)。如果curlpp(libcurl),您能否指出我可以找到为Qt安装它的步骤(或请解释)的地方?
非常感谢。
我是Qt新手。我为 VS2008 安装了 Qt 并与我的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 示例中找到,您可以在此处阅读其源代码。
Giuseppe 是对的,你不需要使用libcurl、curlpp和类似的库。没有必要这样做,Qt 本身就有一个简单的工作类。
请记住,发送请求和检索回复的标准方式是异步的。您始终必须将 manager finished(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。它有一个很好的模拟器和一个完整的移动设备测试工具链。