QRestAccessManager 类
QRestAccessManager 是 QNetworkAccessManager 的一种便利包装。 更多信息...
头文件 | #include <QRestAccessManager> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake | QT += network |
自 | Qt 6.7 |
继承自 | QObject |
状态 | 预览阶段 |
此类正在开发中,可能随时更改。
- 包括继承成员在内的所有成员列表
- QRestAccessManager 是网络编程 API 的一部分。
注意:本类中所有函数均 可重入。
公有函数
QRestAccessManager(QNetworkAccessManager *manager, QObject *parent = nullptr) | |
virtual | ~QRestAccessManager() override |
QNetworkReply * | deleteResource(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | get(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | get(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | get(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | get(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | head(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkAccessManager * | networkAccessManager() const |
QNetworkReply * | patch(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | patch(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | patch(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | patch(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | post(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | post(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | post(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | post(const QNetworkRequest &request, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | post(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | put(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | put(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | put(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | put(const QNetworkRequest &request, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | put(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
详细描述
QRestAccessManager 是基于 QNetworkAccessManager 之上的一个便利包装。它改进了在典型的 REST 客户端应用程序中有用的大型数据和 HTTP 方法。
可以通过直接配置包装的 QNetworkAccessManager 来访问常见的 Qt 网络功能。QRestAccessManager 不拥有包装的 QNetworkAccessManager。
QRestAccessManager 及相关 QRestReply 类只能在它们所存在的线程中使用。有关更多信息,请参阅 QObject 线程亲和力。
发布网络请求和处理响应
使用与所需 HTTP 方法相对应的函数调用启动网络请求,例如 get()
和 post()
。
使用信号和槽
该函数返回一个 QNetworkReply* 对象,可以使用其信号以传统 Qt-signals-and-slots 的方式跟踪请求的完成。
以下是发送 GET 请求和处理响应的示例
QNetworkReply *reply = manager->get(request); QObject::connect(reply, &QNetworkReply::finished, this, [reply]() { // The reply may be wrapped in the finish handler: QRestReply restReply(reply); if (restReply.isSuccess()) // ... });
使用回调和上下文对象
这些函数还接受一个QObject(子类)类型的上下文对象和一个回调函数作为参数。回调函数接受一个QRestReply&&作为参数。回调可以是任何可调用的,包括成员函数指针。
这些回调在回复处理完成时被调用(如果在错误导致的处理完成时也会调用)。
上下文对象可以是nullptr
,尽管一般来说,这并不可取。使用有效的上下文对象能确保如果上下文对象在请求处理期间被销毁,那么回调不会被调用。访问已销毁上下文的漏网回调是应用行为错误的一个来源。
以下是一个发送GET请求并检查响应的例子
// With lambda manager->get(request, this, [this](QRestReply &reply) { if (reply.isSuccess()) { // ... } }); // With member function manager->get(request, this, &MyClass::handleFinished);
许多函数接收要发送到服务器的数据。数据作为请求之后的第二个参数提供。
以下是一个发送POST请求并检查响应的例子
QJsonDocument myJson; // ... manager->post(request, myJson, this, [this](QRestReply &reply) { if (!reply.isSuccess()) { // ... } if (std::optional json = reply.readJson()) { // use *json } });
提供的QRestReply&&在回调执行期间是有效的。如果你需要更长时间,你可以将其移动到另一个QRestReply,或者构造一个新的,并用QNetworkReply初始化它(参见QRestReply::networkReply)。
支持的数据类型
以下表格总结了方法和支持的数据类型。《X》表示支持。
数据类型 | get() | post() | put() | head() | patch() | deleteResource() | sendCustomRequest() |
---|---|---|---|---|---|---|---|
无数据 | X | - | - | X | - | X | - |
QByteArray | X | X | X | - | X | - | X |
QJsonDocument *) | X | X | X | - | X | - | - |
QVariantMap **) | - | X | X | - | X | - | - |
QHttpMultiPart | - | X | X | - | - | - | X |
QIODevice | X | X | X | - | X | - | X |
*) QJsonDocument以QJsonDocument::Compact格式发送,如果未设置Content-Type
标题,则将其设置为application/json
**) QVariantMap将被转换为并作为QJsonObject处理
另请参阅 QRestReply,QNetworkRequestFactory和QNetworkAccessManager。
成员函数文档
[explicit]
QRestAccessManager::QRestAccessManager(QNetworkAccessManager *manager, QObject *parent = nullptr)
构建一个QRestAccessManager对象,并将parent设置为父对象,并将manager设置为底层的QNetworkAccessManager,用于通信。
另请参阅 networkAccessManager。
[override virtual noexcept]
QRestAccessManager::~QRestAccessManager()
销毁QRestAccessManager对象。
模板 <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::deleteResource(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
根据request发出HTTP DELETE
。
可以为处理请求完成提供可选的callback和context对象,如下所示
manager->deleteResource(request, this, [this](QRestReply &reply) { if (reply.isSuccess()) // ... });
还可以使用返回的 QNetworkReply* 对象的信号。更多详细信息,请参阅 发送网络请求和处理回复。
删除资源(deleteResource()
)请求不支持提供数据。
另请参阅 QRestReply。
QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
基于 request 发出 HTTP GET 请求。
可以为处理请求完成提供可选的callback和context对象,如下所示
manager->get(request, this, [this](QRestReply &reply) { if (!reply.isSuccess()) // handle error if (std::optional json = reply.readJson()) // use *json });
还可以使用返回的 QNetworkReply* 对象的信号。更多详细信息,请参阅 发送网络请求和处理回复。
另请参阅 QRestReply。
QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
基于 request 和提供的 data 发出 HTTP GET 请求。
可以为处理请求完成提供可选的callback和context对象,如下所示
manager->get(request, myData, this, [this](QRestReply &reply) { if (reply.isSuccess()) // ... });
还可以使用返回的 QNetworkReply* 对象的信号。更多详细信息,请参阅 发送网络请求和处理回复。
另请参阅 QRestReply。
QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
这是一个重载函数。
QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
这是一个重载函数。
QNetworkReply *QRestAccessManager::head(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
基于 request 发出 HTTP HEAD 请求。
可以为处理请求完成提供可选的callback和context对象,如下所示
manager->head(request, this, [this](QRestReply &reply) { if (reply.isSuccess()) // ... });
还可以使用返回的 QNetworkReply* 对象的信号。更多详细信息,请参阅 发送网络请求和处理回复。
head()
请求不支持提供数据。
另请参阅 QRestReply。
QNetworkAccessManager *QRestAccessManager::networkAccessManager() const
返回底层的 QNetworkAccessManager 实例。
另请参阅 QNetworkAccessManager。
QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
基于 request 发出 HTTP PATCH
。
可以为处理请求完成提供可选的callback和context对象,如下所示
manager->patch(request, myData, this, [this](QRestReply &reply) { if (reply.isSuccess()) // ... });
还可以使用返回的 QNetworkReply* 对象的信号。更多详细信息,请参阅 发送网络请求和处理回复。
patch()
方法始终需要 data 参数。以下数据类型支持:
- QByteArray
- QJsonDocument *)
- QVariantMap **)
- QIODevice*
*) 以 QJsonDocument::Compact 格式发送,如果未设置 Content-Type
标头,则将 Content-Type
标头设置为 application/json
**) QVariantMap 将被转换为并被视为一个 QJsonObject
另请参阅 QRestReply。
template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
这是一个重载函数。
template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
这是一个重载函数。
template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
这是一个重载函数。
template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
基于 request 发出 HTTP POST
。
可以为处理请求完成提供可选的callback和context对象,如下所示
manager->post(request, myData, this, [this](QRestReply &reply) { if (reply.isSuccess()) // ... });
或者,也可以使用返回的 QNetworkReply* 对象的信号。更多信息请参见 发出网络请求和处理回复。
post()
方法始终需要 data 参数。以下数据类型支持:
*) 以 QJsonDocument::Compact 格式发送,如果未设置 Content-Type
标头,则将 Content-Type
标头设置为 application/json
**) QVariantMap 将被转换为并被视为一个 QJsonObject
另请参阅 QRestReply。
template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
这是一个重载函数。
template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
这是一个重载函数。
模板 <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
这是一个重载函数。
模板 <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
这是一个重载函数。
模板 <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
基于 request 的 HTTP PUT
操作。
可以为处理请求完成提供可选的callback和context对象,如下所示
manager->put(request, myData, this, [this](QRestReply &reply) { if (reply.isSuccess()) // ... });
还可以使用返回的 QNetworkReply* 对象的信号。更多详细信息,请参阅 发送网络请求和处理回复。
put()
方法始终需要 data 参数。以下数据类型受支持
*) 以 QJsonDocument::Compact 格式发送,如果未设置 Content-Type
标头,则将 Content-Type
标头设置为 application/json
**) QVariantMap 将被转换为并被视为一个 QJsonObject
另请参阅 QRestReply。
模板 <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
这是一个重载函数。
模板 <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
这是一个重载函数。
模板 <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
这是一个重载函数。
模板 <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
这是一个重载函数。
模板 <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
基于自定义 method 和提供的 data 发送基于 HTTP 的请求。
可以为处理请求完成提供可选的callback和context对象,如下所示
manager->sendCustomRequest(request, "MYMETHOD", myData, this, [this](QRestReply &reply) { if (reply.isSuccess()) // ... });
还可以使用返回的 QNetworkReply* 对象的信号。更多详细信息,请参阅 发送网络请求和处理回复。
模板 <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
这是一个重载函数。
模板 <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
这是一个重载函数。
© 2024 Qt 公司。本文件中包含的文档贡献是各自所有者的版权。本文件提供的文档根据 GNU 自由文档许可证版本 1.3 授予的许可条款发放,该许可证由自由软件基金会发布。Qt 及其相关标志是芬兰和/或其他全球国家的 Qt 公司的商标。所有其他商标均为各自所有者的财产。