HTTP
一、描述
1.Qt网络访问 API 是围绕 QNetworkAccessManager 对象构建的,该对象保存它发送的请求的通用配置和设置。一个 QNetworkAccessManager 实例应该足以满足整个 Qt 应用程序网络访问的需求。 由于 QNetworkAccessManager 是基于 QObject 的,所以只能在它所属的线程中使用。
2、一旦创建了 QNetworkAccessManager 对象,应用程序就可以使用它通过网络发送请求。它提供了一组标准函数,它们接受一个请求和可选数据,每个函数都返回一个 QNetworkReply 对象。返回的对象用于获取响应相应请求而返回的任何数据。
可以通过以下方式完成简单的网络下载:
QNetworkAccessManager *manager = new QNetworkAccessManager(this); connect(manager, &QNetworkAccessManager::finished, this, &MyClass::replyFinished); manager->get(QNetworkRequest(QUrl("http://qt-project.org")));
3、QNetworkAccessManager 有一个异步 API。 当上面的 replyFinished 槽函数被调用时,它采用的参数是 QNetworkReply 对象,包含下载的数据以及元数据(标题等)。
注意:请求完成后,用户有责任在适当的时候删除 QNetworkReply 对象。不要在连接到finished()的slot里面直接删除,可以使用 deleteLater() 函数。
注意: QNetworkAccessManager 将它收到的请求排入队列。 并行执行的请求数量取决于协议。 目前,对于桌面平台上的 HTTP 协议,一个主机/端口组合并行执行 6 个请求。
一个更复杂的例子:
QNetworkRequest request; request.setUrl(QUrl("http://qt-project.org")); request.setRawHeader("User-Agent", "MyOwnBrowser 1.0"); QNetworkReply *reply = manager->get(request); connect(reply, &QIODevice::readyRead, this, &MyClass::slotReadyRead); connect(reply, &QNetworkReply::errorOccurred,this, &MyClass::slotError); connect(reply, &QNetworkReply::sslErrors,this, &MyClass::slotSslErrors);
HttpServer
Qt开发的轻量级http服务器-QtHttpServer编译
下载QtHttpServer源码 https://github.com/qt-labs/qthttpserver
下载第三方依赖http-parser源码