QNetworkAccessManager 类
QNetworkAccessManager 类允许应用程序发送网络请求并接收响应。 更多...
头文件 | #include <QNetworkAccessManager> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake | QT += network |
继承自 | QObject |
- 包括继承成员在内的所有成员列表
- 已弃用的成员
- QNetworkAccessManager 是网络编程 API 的一部分。网络编程 API.
注意:此类中所有函数均为 重入。
公共类型
枚举 | Operation { HeadOperation, GetOperation, PutOperation, PostOperation, DeleteOperation, CustomOperation } |
公共函数
QNetworkAccessManager(QObject *parent = nullptr) | |
虚拟 | ~QNetworkAccessManager() |
void | addStrictTransportSecurityHosts(const QList |
bool | autoDeleteReplies() const |
QAbstractNetworkCache * | cache() const |
void | clearAccessCache() |
void | clearConnectionCache() |
void | connectToHost(const QString &hostName, quint16 port = 80) |
void | connectToHostEncrypted(const QString &hostName, quint16 port = 443, const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration()) |
void | connectToHostEncrypted(const QString &hostName, quint16 port, const QSslConfiguration &sslConfiguration, const QString &peerName) |
QNetworkCookieJar * | cookieJar() const |
QNetworkReply * | deleteResource(const QNetworkRequest &request) |
void | enableStrictTransportSecurityStore(bool enabled, const QString &storeDir = QString()) |
QNetworkReply * | get(const QNetworkRequest &request) |
(since 6.7) QNetworkReply * | get(const QNetworkRequest &request, QIODevice *data) |
(since 6.7) QNetworkReply * | get(const QNetworkRequest &request, const QByteArray &data) |
QNetworkReply * | head(const QNetworkRequest &request) |
bool | isStrictTransportSecurityEnabled() const |
bool | isStrictTransportSecurityStoreEnabled() const |
QNetworkReply * | post(const QNetworkRequest &request, QIODevice *data) |
QNetworkReply * | post(const QNetworkRequest &request, const QByteArray &data) |
QNetworkReply * | post(const QNetworkRequest &request, QHttpMultiPart *multiPart) |
QNetworkProxy | proxy() const |
QNetworkProxyFactory * | proxyFactory() const |
QNetworkReply * | put(const QNetworkRequest &request, QIODevice *data) |
QNetworkReply * | put(const QNetworkRequest &request, const QByteArray &data) |
QNetworkReply * | put(const QNetworkRequest &request, QHttpMultiPart *multiPart) |
QNetworkRequest::RedirectPolicy | redirectPolicy() const |
QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr) |
QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data) |
QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart) |
void | setAutoDeleteReplies(bool shouldAutoDelete) |
void | setCache(QAbstractNetworkCache *cache) |
void | setCookieJar(QNetworkCookieJar *cookieJar) |
void | setProxy(const QNetworkProxy &proxy) |
void | setProxyFactory(QNetworkProxyFactory *factory) |
void | setRedirectPolicy(QNetworkRequest::RedirectPolicy policy) |
void | setStrictTransportSecurityEnabled(bool enabled) |
void | setTransferTimeout(int timeout) |
(since 6.7) void | setTransferTimeout(std::chrono::milliseconds duration = QNetworkRequest::DefaultTransferTimeout) |
QList<QHstsPolicy> | strictTransportSecurityHosts() const |
virtual QStringList | supportedSchemes() const |
int | transferTimeout() const |
(since 6.7) std::chrono::milliseconds | transferTimeoutAsDuration() const |
署名
void | authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator) |
void | encrypted(QNetworkReply *reply) |
void | finished(QNetworkReply *reply) |
void | preSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator) |
void | proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator) |
void | sslErrors(QNetworkReply *reply, const QList<QSslError> &errors) |
受保护的函数
virtual QNetworkReply * | createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &originalReq, QIODevice *outgoingData = nullptr) |
详细描述
网络访问API围绕一个QNetworkAccessManager对象构建,该对象保存其发送请求的通用配置和设置。它包含代理和缓存配置,以及与此类问题相关的信号和用于监控网络操作进度的响应信号。对于整个Qt应用程序来说,一个QNetworkAccessManager实例应该足够。由于QNetworkAccessManager基于QObject,它只能从它所属的线程中使用。
一旦创建了QNetworkAccessManager对象,应用程序就可以用它来在网络上发送请求。提供了一组标准函数,这些函数接受一个请求和可选数据,并返回一个QNetworkReply对象。返回的对象用于获取对相应请求的响应返回的任何数据。
一个简单的网络下载可以通过以下方法完成
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);
另请参阅:QNetworkRequest,QNetworkReply和QNetworkProxy。
成员类型文档
enum QNetworkAccessManager::Operation
指示此响应正在处理的操作。
常量 | 值 | 描述 |
---|---|---|
QNetworkAccessManager::HeadOperation | 1 | 检索头操作(使用head创建) |
QNetworkAccessManager::GetOperation | 2 | 检索头和下载内容(使用get创建) |
QNetworkAccessManager::PutOperation | 3 | 上传内容操作(使用put创建) |
QNetworkAccessManager::PostOperation | 4 | 通过HTTP POST发送HTML表单的内容以便处理(使用post创建) |
QNetworkAccessManager::DeleteOperation | 5 | 删除内容操作(使用deleteResource创建) |
QNetworkAccessManager::CustomOperation | 6 | 自定义操作(使用sendCustomRequest创建) |
另请参阅:QNetworkReply::operation。
成员函数文档
[显式]
QNetworkAccessManager::QNetworkAccessManager(QObject *parent = nullptr)
构造一个QNetworkAccessManager对象,它是网络访问API的中心,并将parent设置为父对象。
[虚拟 noexcept]
QNetworkAccessManager::~QNetworkAccessManager()
销毁 QNetworkAccessManager 对象并释放所占用资源。注意,从这个类返回的 QNetworkReply 对象将此对象设置为其父对象,这意味着如果未调用 QObject::setParent(),它们将随之一并删除。
void QNetworkAccessManager::addStrictTransportSecurityHosts(const QList<QHstsPolicy> &knownHosts)
将 HTTP 严格传输安全策略添加到 HSTS 缓存中。knownHosts 包含具有 QHstsPolicy 信息已知的宿主。
注意:如果之前存在,已过期的策略将移除缓存中的已知宿主。
注意:在处理 HTTP 响应时,QNetworkAccessManager 还可以更新 HSTS 缓存,移除或更新现有策略或引入新的 knownHosts。因此,当前实现是服务器驱动的,客户端代码可以向 QNetworkAccessManager 提供 previously known 或 discovered 策略,但此信息可以被 "Strict-Transport-Security" 响应头中的新信息覆盖。
另请参阅: addStrictTransportSecurityHosts(),enableStrictTransportSecurityStore () 和 QHstsPolicy。
[信号]
void QNetworkAccessManager::authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator)
当最终服务器在提供请求的内容之前要求身份验证时,将发出此信号。连接到此信号的槽应将 reply 对象(可由检查 reply 对象确定)的凭据填入 authenticator 对象。
QNetworkAccessManager 将在内部缓存凭据并将相同的值发送给服务器,如果服务器再次需要身份验证,而不会发出 authenticationRequired() 信号。如果它拒绝了凭据,则将再次发出此信号。
注意:要使请求不发送凭据,不得在 authenticator 对象上调用 setUser() 或 setPassword()。这将导致发出具有错误 AuthenticationRequiredError 的 finished() 信号。
注意:无法使用 QueuedConnection 连接到此信号,因为如果在信号返回时身份验证器尚未用新信息填充,连接将失败。
另请参阅: proxyAuthenticationRequired (),QAuthenticator::setUser () 和 QAuthenticator::setPassword ()。
bool QNetworkAccessManager::autoDeleteReplies() const
如果 QNetworkAccessManager 当前配置了自动删除 QNetworkReplies,则返回 true,否则返回 false。
另请参阅: setAutoDeleteReplies 和 QNetworkRequest::AutoDeleteReplyOnFinishAttribute。
QAbstractNetworkCache *QNetworkAccessManager::cache() const
返回用于存储从网络获取的数据的缓存。
另请参阅: setCache ()。
void QNetworkAccessManager::clearAccessCache()
清除认证数据和网络连接的内部缓存。
此函数在自动测试中很有用。
另请参阅 clearConnectionCache()。
void QNetworkAccessManager::clearConnectionCache()
清空网络连接的内部缓存。与clearAccessCache()不同,认证数据保留。
另请参阅 clearAccessCache()。
void QNetworkAccessManager::connectToHost(const QString &hostName, quint16 port = 80)
初始化与由hostName指定的主机在端口port的连接。此函数用于在发起HTTP请求之前完成与主机的TCP握手,从而降低网络延迟。
注意: 此函数没有报告错误的可能性。
另请参阅 connectToHostEncrypted()、get()、post()、put()和deleteResource()。
void QNetworkAccessManager::connectToHostEncrypted(const QString &hostName, quint16 port = 443, const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration())
初始化与由hostName指定的主机在端口port的连接,使用sslConfiguration。此函数用于在发起HTTPS请求之前完成与主机的TCP和SSL握手,从而降低网络延迟。
注意:可以通过在sslConfiguration上调用 setAllowedNextProtocols() 并包含QSslConfiguration::ALPNProtocolHTTP2来预先连接HTTP/2连接。在使用HTTP/2时,每个主机足够一个连接,即对每个主机多次调用此方法不会导致网络事务更快。
注意: 此函数没有报告错误的可能性。
另请参阅 connectToHost()、get()、post()、put()和deleteResource()。
void QNetworkAccessManager::connectToHostEncrypted(const QString &hostName, quint16 port, const QSslConfiguration &sslConfiguration, const QString &peerName)
这是一个重载函数。
初始化与由hostName指定的主机在端口port的连接,使用sslConfiguration和将peerName设置为证书验证中使用的主机名。此函数用于在发起HTTPS请求之前完成与主机的TCP和SSL握手,从而降低网络延迟。
注意:可以通过在sslConfiguration上调用 setAllowedNextProtocols() 并包含QSslConfiguration::ALPNProtocolHTTP2来预先连接HTTP/2连接。在使用HTTP/2时,每个主机足够一个连接,即对每个主机多次调用此方法不会导致网络事务更快。
注意: 此函数没有报告错误的可能性。
另请参阅 connectToHost()、get()、post()、put()和deleteResource()。
QNetworkCookieJar *QNetworkAccessManager::cookieJar() const
返回用于存储从网络获取的 cookie 以及即将发送的 cookie 的QNetworkCookieJar。
另请参阅 setCookieJar()。
[虚拟保护]
QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &originalReq, QIODevice *outgoingData = nullptr)
返回一个新的QNetworkReply对象来处理操作op和请求originalReq。对于Get和Head请求,设备outgoingData的值总是0,但在这些操作中(QByteArray变体将通过QBuffer对象传递),它是传递给post()和put()的值。
默认实现会在设置setCookieJar()时调用的cookie jar中调用QNetworkCookieJar::cookiesForUrl()来获取要发送到远程服务器的cookie。
返回的对象必须处于一个开放状态。
QNetworkReply *QNetworkAccessManager::deleteResource(const QNetworkRequest &request)
向请求发送要由request的URL识别的资源。
注意:该功能目前仅适用于HTTP,执行HTTP DELETE请求。
另请参阅:get(),post(),put()和sendCustomRequest()。
void QNetworkAccessManager::enableStrictTransportSecurityStore(bool enabled, const QString &storeDir = QString())
如果enabled是true
,则内部HSTS缓存将使用持久存储来读取和写入HSTS策略。storeDir定义了此存储的位置。默认位置由QStandardPaths::CacheLocation定义。如果没有可写的QStandartPaths::CacheLocation并且storeDir为空字符串,则存储将在程序的当前工作目录中。
注意:HSTS缓存已包含HSTS策略时,启用持久存储,这些策略将在存储中保留。如果缓存和存储都包含相同的已知主机,则认为缓存中的策略更加最新(并将覆盖存储中的先前值)。如果这种行为不受欢迎,请在启用Strict Transport Security之前启用HSTS存储。默认情况下,HSTS策略的持久存储被禁用。
另请参阅:isStrictTransportSecurityStoreEnabled(),setStrictTransportSecurityEnabled()和QStandardPaths::standardLocations()。
[信号]
void QNetworkAccessManager::encrypted(QNetworkReply *reply)
此信号在SSL/TLS会话成功完成初始握手时发出。在此点之前,尚未传输任何用户数据。该信号可用于对证书链进行额外检查,例如在网站证书更改时通知用户。《i translate="no"》回复《/i》参数指定了哪个网络回复负责。如果回复不符合预期标准,则应由连接到此信号的槽调用《a href="qnetworkreply.html#abort" translate="no"》QNetworkReply::abort《/a》来终止。可以使用《a href="qnetworkreply.html#sslConfiguration" translate="no"》QNetworkReply::sslConfiguration《/a》方法检查正在使用的SSL配置。
内部,《a href="qnetworkaccessmanager.html" translate="no"》QNetworkAccessManager《/a》可能会向服务器打开多个连接,以便允许它并行处理请求。这些连接可能会被重用,这意味着加密()信号不会发出。这意味着您只能保证在整个《a href="qnetworkaccessmanager.html" translate="no"》QNetworkAccessManager《/a》生命周期中接收该站点的第一个连接的此信号。
另请参阅《a href="qsslsocket.html#encrypted" translate="no"》QSslSocket::encrypted《/a》和《a href="qnetworkreply.html#encrypted" translate="no"》QNetworkReply::encrypted《/a》。
[signal]
void QNetworkAccessManager::finished(QNetworkReply *reply)
每当挂起的网络回复完成时,都会发出此信号。《i translate="no"》回复《/i》参数将包含指向刚完成的回复的指针。此信号与《a href="qnetworkreply.html#finished" translate="no"》QNetworkReply::finished《/a》信号同时发出。
有关对象将处于的状态的信息,请参阅《a href="qnetworkreply.html#finished" translate="no"》QNetworkReply::finished《/a》。
注意:不要在连接到此信号的槽中删除《i translate="no"》回复对象。请使用《a href="qobject.html#deleteLater" translate="no"》deleteLater《/a》。
另请参阅《a href="qnetworkreply.html#finished" translate="no"》QNetworkReply::finished《/a》和《a href="qnetworkreply.html#error" translate="no"》QNetworkReply::error《/a》。
QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request)
提交一个请求以获取目标《i translate="no"》请求的内容,并返回一个为读取打开的新《a href="qnetworkreply.html" translate="no">QNetworkReply对象,每当有新数据到达时都会发出《a href="qiodevice.html#readyRead" translate="no"》readyRead《/a》()信号。
将下载内容及其相关头信息。
另请参阅《a href="qnetworkaccessmanager.html#post" translate="no"》post《/a》(), 《a href="qnetworkaccessmanager.html#put" translate="no"》put《/a》(), 《a href="qnetworkaccessmanager.html#deleteResource" translate="no"》deleteResource《/a》()和《a href="qnetworkaccessmanager.html#sendCustomRequest" translate="no"》sendCustomRequest《/a》()。
[since 6.7]
QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request, QIODevice *data)
这是一个重载函数。
注意:带有消息体的GET请求不会缓存。
注意:如果请求被重定向,只有当状态码为307或308时,消息体才会保留。
此函数自Qt 6.7起引入。
[since 6.7]
QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request, const QByteArray &data)
这是一个重载函数。
注意:带有消息体的GET请求不会缓存。
注意:如果请求被重定向,只有当状态码为307或308时,消息体才会保留。
此函数自Qt 6.7起引入。
QNetworkReply *QNetworkAccessManager::head(const QNetworkRequest &request)
向网络发送请求以获取request的网络头信息,并返回一个新的包含这些头信息的QNetworkReply对象。
该函数名称来源于与之关联的HTTP请求(HEAD)。
bool QNetworkAccessManager::isStrictTransportSecurityEnabled() const
如果启用了HTTP严格传输安全(HSTS),则返回true。默认情况下,HSTS是禁用的。
另请参阅 setStrictTransportSecurityEnabled().
bool QNetworkAccessManager::isStrictTransportSecurityStoreEnabled() const
如果HSTS缓存使用一个持久存储来加载和存储HSTS策略,则返回true。
另请参阅 enableStrictTransportSecurityStore().
QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, QIODevice *data)
发送一个HTTP POST请求到request指定的目的地,并返回一个用于读取的新QNetworkReply对象,该对象将包含服务器发送的回复。将把data设备的全部内容上传到服务器。
data必须打开供读取,并保持有效,直到发出对此回复的finished()信号。
注意: 在其他协议(HTTP和HTTPS之外)上发送POST请求是未定义的,可能会失败。
另请参阅 get(),put(),deleteResource(),以及sendCustomRequest().
QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, const QByteArray &data)
这是一个重载函数。
将data字节数组的内容发送到request指定的目的地。
QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, QHttpMultiPart *multiPart)
这是一个重载函数。
将multiPart消息的内容发送到request指定的目的地。
这可以用于在HTTP上发送MIME多部分消息。
另请参阅 QHttpMultiPart,QHttpPart,以及put().
[信号]
void QNetworkAccessManager::preSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator)
如果SSL/TLS握手协商了PSK加密套件,则需要PSK身份验证,此时将发出此信号。reply对象正在协商这些加密套件的QNetworkReply。
在使用 PSK 时,客户端必须向服务器发送一个有效的身份和一个有效的预共享密钥,以便 SSL 握手可以继续。应用程序可以通过根据需要填写传递的 authenticator 对象来通过连接到此信号的信槽提供此信息。
注意:忽略此信号或未提供所需的凭据将导致握手机会失败,从而终止连接。
注意:authenticator 对象属于响应,应用程序不得删除。
另请参阅:QSslPreSharedKeyAuthenticator.
QNetworkProxy QNetworkAccessManager::proxy() const
返回使用此 QNetworkAccessManager 对象发送的请求将使用的 QNetworkProxy。代理的默认值为 QNetworkProxy::DefaultProxy。
另请参阅:setProxy(),setProxyFactory() 和 proxyAuthenticationRequired()。
[信号]
void QNetworkAccessManager::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
每当代理请求身份验证且 QNetworkAccessManager 无法找到有效、缓存的凭据时,都会发出此信号。连接到此信号的槽应填写代理 proxy 的凭据 authenticator 对象。
QNetworkAccessManager 将在内部缓存凭据。下一次代理请求身份验证时,QNetworkAccessManager 会自动发送相同的凭据,而不会再次发出 proxyAuthenticationRequired 信号。
如果代理拒绝凭据,QNetworkAccessManager 将再次发出此信号。
另请参阅:proxy(),setProxy() 和 authenticationRequired()。
QNetworkProxyFactory *QNetworkAccessManager::proxyFactory() const
返回用于确定请求要使用的代理的代理工厂。
注意,此函数返回的指针由 QNetworkAccessManager 管理,并且可能在任何时候被删除。
另请参阅:setProxyFactory() 和 proxy()。
QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, QIODevice *data)
将 data 的内容上传到目标 request 并返回一个新 QNetworkReply 对象,它将为回复而打开。
data 必须在调用此函数时打开以供读取,并且必须保持有效直到对此回复发出 finished() 信号。
从返回的对象中可读取的内容取决于协议。对于 HTTP,服务器可能会发送一个小 HTML 页面,指示上传成功(或失败)。其他协议可能在它们的回复中包含内容。
注意:对于HTTP,这个请求将发送PUT请求,大多数服务器不允许。表单上传机制,包括通过HTML表单上传文件,使用POST机制。
另请参阅:get(),post(),deleteResource(),以及sendCustomRequest()。
QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, const QByteArray &data)
这是一个重载函数。
将data字节数组的内容发送到request指定的目的地。
QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, QHttpMultiPart *multiPart)
这是一个重载函数。
将multiPart消息的内容发送到request指定的目的地。
这可以用于在HTTP上发送MIME多部分消息。
另请参阅:QHttpMultiPart,QHttpPart,以及post()。
QNetworkRequest::RedirectPolicy QNetworkAccessManager::redirectPolicy() const
返回创建新请求时使用的重定向策略。
另请参阅:setRedirectPolicy()以及QNetworkRequest::RedirectPolicy。
QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr)
向由request的URL指定的服务器发送自定义请求。
用户负责发送服务器有效的verb。
此方法提供了一种方式来发送除通过get()或post()等方式提供的常用操作之外的其他操作,例如发送HTTP OPTIONS命令。
如果data不为空,则将data设备的内容上传到服务器;在这种情况下,data必须为读取而打开,并且必须保持有效,直到对此回复发出finished()信号。
注意:此功能目前仅适用于HTTP(S)。
另请参阅:get,post,put,以及deleteResource。
QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data)
这是一个重载函数。
将data字节数组的内容发送到request指定的目的地。
QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart)
这是一个重载函数。
向由request的URL指定的服务器发送自定义请求。
将multiPart消息的内容发送到request指定的目的地。
这可以用于发送自定义verb的MIME多部分消息。
另请参阅 QHttpMultiPart,QHttpPart,以及put().
void QNetworkAccessManager::setAutoDeleteReplies(bool shouldAutoDelete)
启用或禁用 QNetworkReplies 的自动删除。
将 shouldAutoDelete 设置为 true 与将所有传递给此实例的 QNetworkRequest::AutoDeleteReplyOnFinishAttribute 属性设置为 true 等效,除非该属性已在 QNetworkRequest 上明确设置。
另请参阅 autoDeleteReplies 和 QNetworkRequest::AutoDeleteReplyOnFinishAttribute。
void QNetworkAccessManager::setCache(QAbstractNetworkCache *cache)
将管理器的网络缓存设置为指定的 cache。该缓存用于管理器分发的所有请求。
使用此函数将网络缓存对象设置为一个实现额外功能的类,例如将 cookie 保存到持久存储。
注意: QNetworkAccessManager 会接管 cache 对象。
QNetworkAccessManager 默认没有设置缓存。Qt 提供了一个简单的磁盘缓存 QNetworkDiskCache,可以用来。
另请参阅 cache() 和 QNetworkRequest::CacheLoadControl。
void QNetworkAccessManager::setCookieJar(QNetworkCookieJar *cookieJar)
将管理器的 cookie jar 设置为指定的 cookieJar。所派的请求将使用此 cookie jar。
使用此函数将 cookie jar 对象设置为一个实现额外功能的类,例如将 cookie 保存到持久存储。
注意: QNetworkAccessManager 会接管 cookieJar 对象。
如果 cookieJar 与此 QNetworkAccessManager 在同一线程中,它会设置 cookieJar 的父对象,使得当此对象被删除时,cookie jar 也会被删除。如果想在不同的 QNetworkAccessManager 对象之间共享 cookie jar,可以在调用此函数后,将 cookie jar 的父对象设置为 0。
QNetworkAccessManager 默认不实现任何自己的 cookie 策略:只要服务器发送的 cookie 合法且符合最低安全要求(cookie 域与请求的匹配,cookie 路径与请求匹配),它会接受所有 cookie。要实现自己的安全策略,重写 QNetworkCookieJar::cookiesForUrl() 和 QNetworkCookieJar::setCookiesFromUrl() 虚拟函数。当 QNetworkAccessManager 侦测到新 cookie 时会调用这些函数。
另请参阅 cookieJar(),QNetworkCookieJar::cookiesForUrl,和 QNetworkCookieJar::setCookiesFromUrl。
void QNetworkAccessManager::setProxy(const QNetworkProxy &proxy)
将用于未来请求的代理设置为 proxy。这不会影响已发送的请求。如果代理请求认证,将发出 proxyAuthenticationRequired() 信号。
具有此功能的代理集将用于所有由 QNetworkAccessManager 发出的请求。在某些情况下,可能需要根据发送请求的类型或目标主机选择不同的代理。如果是这种情况,应考虑使用 setProxyFactory()。
另请参阅proxy() 和 proxyAuthenticationRequired()。
void QNetworkAccessManager::setProxyFactory(QNetworkProxyFactory *factory)
将此类的代理工厂设置为 factory。代理工厂用于确定更具体的代理列表,用于给定的请求,而不是尝试为所有请求使用相同的代理值。
由 QNetworkAccessManager 发出的所有查询将具有类型 QNetworkProxyQuery::UrlRequest。
例如,代理工厂可以应用以下规则
- 如果目标地址在本地网络中(例如,如果主机名不包含点或它是组织范围内的IP地址),则返回 QNetworkProxy::NoProxy
- 如果请求是FTP,则返回FTP代理
- 如果请求是HTTP或HTTPS,则返回HTTP代理
- 否则,返回SOCKSv5代理服务器
factory 对象的生存期将由 QNetworkAccessManager 管理。当需要时,它将删除该对象。
注意:如果您使用 setProxy() 设置了特定代理,则不会使用工厂。
另请参阅proxyFactory(),setProxy() 和 QNetworkProxyQuery。
void QNetworkAccessManager::setRedirectPolicy(QNetworkRequest::RedirectPolicy policy)
将管理器的重定向策略设置为指定的 policy。此策略将影响管理器创建的所有后续请求。
使用此函数在管理器级别启用或禁用HTTP重定向。
注意:在创建请求时,QNetworkRequest::RedirectAttributePolicy具有最高的优先级,其次是管理器的策略。
默认值为 QNetworkRequest::NoLessSafeRedirectPolicy。建议依赖手动重定向处理的自定义客户端在代码中明确设置此策略。
另请参阅redirectPolicy() 和 QNetworkRequest::RedirectPolicy。
void QNetworkAccessManager::setStrictTransportSecurityEnabled(bool enabled)
如果 enabled 被设置为 true
,则 QNetworkAccessManager 将遵循HTTP严格传输安全策略(HSTS,RFC6797)。在处理请求时,QNetworkAccessManager 将自动将“http”方案替换为“https”,并为学生使用安全的传输。如果显式设置,则将端口80替换为端口443。
当启用HSTS时,对于每个通过安全传输接收到的包含HSTS头文件的HTTP响应,QNetworkAccessManager 将更新其HSTS缓存,记住具有有效策略的主机或删除具有已过期或禁用HSTS策略的主机。
另请参阅isStrictTransportSecurityEnabled()。
void QNetworkAccessManager::setTransferTimeout(int timeout)
将 timeout 设置为传输超时,单位为毫秒。
另请参阅setTransferTimeout(std::chrono::milliseconds), transferTimeout() 和 transferTimeoutAsDuration。
[自 6.7]
void QNetworkAccessManager::setTransferTimeout(std::chrono::milliseconds duration = QNetworkRequest::DefaultTransferTimeout)
设置超时 duration 以在无数据交换时中止传输。
如果超时时间内没有传输任何字节数,传输将被中止。零表示未设置计时器。如果没有提供参数,超时为 QNetworkRequest::DefaultTransferTimeout。如果未调用此函数,超时将被禁用,值为零。为执行的请求设置的请求特定的非零超时将覆盖此值。这意味着如果 QNetworkAccessManager 具有启用的超时,则需要禁用它以执行无超时的请求。
此函数自Qt 6.7起引入。
另请参阅transferTimeoutAsDuration。
[信号]
void QNetworkAccessManager::sslErrors(QNetworkReply *reply, const QList<QSslError> &errors)
如果 SSL/TLS 会话在设置过程中遇到错误,包括证书验证错误,则发出此信号。参数 errors 包含错误列表,而参数 reply 是遇到这些错误的 QNetworkReply。
要指示错误不是致命的且应继续连接,应从连接到此信号的槽中调用 QNetworkReply::ignoreSslErrors() 函数。如果不调用它,SSL 会话将在交换任何数据(包括 URL)之前被终止。
此信号可用于向用户显示错误消息,表明安全可能受到损害,并显示 SSL 设置(请参阅 sslConfiguration() 以获取它)。如果用户决定在分析远程证书后继续,则槽应调用 ignoreSslErrors()。
另请参阅QSslSocket::sslErrors(),QNetworkReply::sslErrors(),QNetworkReply::sslConfiguration 和 QNetworkReply::ignoreSslErrors。
QList<QHstsPolicy> QNetworkAccessManager::strictTransportSecurityHosts() const
返回 HTTP Strict Transport Security 策略列表。此列表可能与通过 addStrictTransportSecurityHosts 设置的初始列表不同,如果 HSTS 缓存已从 "Strict-Transport-Security" 响应头中更新。
另请参阅addStrictTransportSecurityHosts 和 QHstsPolicy。
[虚拟]
QStringList QNetworkAccessManager::supportedSchemes() const
列出访问管理器支持的所有 URL 方案。
将此方法重新实现以在您的QNetworkAccessManager子类中提供您自己的支持方案。例如,当您的子类提供对新的协议的支持时,这是必要的。
int QNetworkAccessManager::transferTimeout() const
返回传输超时时间,单位为毫秒。
另请参阅 setTransferTimeout().
[自 6.7]
std::chrono::milliseconds QNetworkAccessManager::transferTimeoutAsDuration() const
返回传输被取消的超时时间,如果没有数据交换。
默认持续时间为零,这意味着不使用超时。
此函数自Qt 6.7起引入。
© 2024 The Qt Company Ltd. 包含在内的文档贡献为其各自所有者的版权。此处提供的文档是根据自由软件基金会发布的GNU自由文档许可协议版本1.3的条款许可的。Qt及其相应标志是芬兰和/或世界其他地区的The Qt Company Ltd.的商标。所有其他商标均为其各自所有者的财产。