在Qt中发出HTTP请求

Rue*_*uel 4 qt libcurl visual-studio-2010 curlpp qtnetwork

我是Qt的新手.我为VS2008安装了Qt并与我的VS2010集成.我只是想知道如何发出HTTP请求.我读过有关QtNetwork但QtHttp很有用的内容.

我也知道libcurlcurlpp,但我在安装它时遇到了问题,并使它与Qt一起工作.

你推荐什么,QtNetwork还是curlpp?如果是QtNetwork,请你给我一个示例函数或一段代码(以及要使用的类).如果curlpp(libcurl),你能指点我到哪里可以找到为Qt安装它的步骤(或亲切解释)吗?

非常感谢你.

Giu*_*one 6

libcurlcurlpp是很棒的库,但是使用它们会为你的项目增加一个你可以避免的依赖.

Qt的最新版本建议用于QNetworkAccessManager发出网络请求(包括http请求)并接收回复.

下载文件的最简单方法是:

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("http://stackoverflow.com")));
Run Code Online (Sandbox Code Playgroud)

replyFinished槽被调用时,QNetworkReply它需要为参数对象将包含所下载的数据以及元数据(标题等).

在Qt示例中可以找到更完整的示例,您可以在此处阅读其源代码.


Zol*_*aKt 5

Giuseppe是对的,你不需要使用libcurl,curlpp和类似的库.没有必要,Qt有一个简单的工作级别.

请记住,发送请求和检索回复的标准方式是异步的.您始终必须将经理完成(QNetworkReply*)信号连接到插槽.

如果您发送多个请求并且不想为每个回复添加一个插槽,则可以始终运行事件循环,并将管理器信号连接到事件循环quit()插槽.

像这样的东西:

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
Run Code Online (Sandbox Code Playgroud)

顺便说一句.不知道你在做什么.但如果它是一个移动应用程序,我会建议你从VS切换到QtCreator IDE.它有一个很好的模拟器和一个完整的工具链,用于移动设备测试.