QNetworkAccessManager
QNetworkAccessManager
类允许应用程序发送网络请求和接收回复。
- 网络访问API围绕一个
QNetworkAccessManager
对象构造,该对象保存其发送的请求的通用配置和设置。它包含代理和缓存配置,以及与此类问题相关的信号,以及可用于件事网络操作进度的回复信号。一个QNetworkAccessManager实例对于整个Qt应用程序应该足够了。由于QNetworkAccessManager基于QObject
,因此只能在其所属的线程中使用它。 - 一旦创建了QNetworkAccessManager对象,应用程序就可以使用它通过网络发送请求。提供了一组标准函数,这些函数接收一个请求和可选数据,并且每个函数都返回一个
QNetworkReply
对象。返回的对象用于获取响应于相应请求而返回任何数据
Header: | #include <QNetworkAccessManager> |
---|---|
qmake: | QT += network |
Since: | Qt 4.4 |
继承 | QObject |
注意:此类中的所有函数都是reentent。
一个简单的网络下载可以通过以下方式完成:
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, &QNetworkAccessManager::finished,
this, &MyClass::replyFinished);
manager->get(QNetworkRequest(QUrl("http://qt-project.org")));
QNetworkAccessManager具有异步API。replyFinished
调用上面的插槽时,它采用的参数是QNetworkReply对象,其中包含下载的数据以及元数据(标头等)。
注意:请求完成后,用户有责任在适当的时候删除QNetworkReply
对象。不要在连接finished()
插槽内直接删除它。您可以使用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);
官方文档:https://doc.qt.io/qt-5/qnetworkaccessmanager.html
Operation
原型
enum QNetworkAccessManager::Operation
作用
- 表示此回复正在处理的操作。
- 这个枚举是在Qt 4.7中引入或修改的。
- 另请参见
QNetworkReply :: operation()
。
Constant | value | 描述 |
---|---|---|
QNetworkAccessManager::HeadOperation | 1 | 检索标头操作(使用head()创建) |
QNetworkAccessManager::GetOperation | 2 | 检索标题并下载内容(使用get()创建) |
QNetworkAccessManager::PutOperation | 3 | 上传内容操作(使用put()创建) |
QNetworkAccessManager::PostOperation | 4 | 发送HTML表单的内容以通过HTTP POST处理(使用post()创建) |
QNetworkAccessManager::DeleteOperation | 5 | 删除内容操作(使用deleteResource()创建) |
QNetworkAccessManager::CustomOperation | 6 | 定制操作(使用sendCustomRequest()创建) |