QNetworkAccessManager 类

QNetworkAccessManager 类允许应用程序发送网络请求并接收响应。 更多...

头文件 #include <QNetworkAccessManager>
CMakefind_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmakeQT += network
继承自 QObject

注意:此类中所有函数均为 重入

公共类型

枚举Operation { HeadOperation, GetOperation, PutOperation, PostOperation, DeleteOperation, CustomOperation }

公共函数

QNetworkAccessManager(QObject *parent = nullptr)
虚拟~QNetworkAccessManager()
voidaddStrictTransportSecurityHosts(const QList &knownHosts)
boolautoDeleteReplies() const
QAbstractNetworkCache *cache() const
voidclearAccessCache()
voidclearConnectionCache()
voidconnectToHost(const QString &hostName, quint16 port = 80)
voidconnectToHostEncrypted(const QString &hostName, quint16 port = 443, const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration())
voidconnectToHostEncrypted(const QString &hostName, quint16 port, const QSslConfiguration &sslConfiguration, const QString &peerName)
QNetworkCookieJar *cookieJar() const
QNetworkReply *deleteResource(const QNetworkRequest &request)
voidenableStrictTransportSecurityStore(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)
boolisStrictTransportSecurityEnabled() const
boolisStrictTransportSecurityStoreEnabled() const
QNetworkReply *post(const QNetworkRequest &request, QIODevice *data)
QNetworkReply *post(const QNetworkRequest &request, const QByteArray &data)
QNetworkReply *post(const QNetworkRequest &request, QHttpMultiPart *multiPart)
QNetworkProxyproxy() 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::RedirectPolicyredirectPolicy() 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)
voidsetAutoDeleteReplies(bool shouldAutoDelete)
voidsetCache(QAbstractNetworkCache *cache)
voidsetCookieJar(QNetworkCookieJar *cookieJar)
voidsetProxy(const QNetworkProxy &proxy)
voidsetProxyFactory(QNetworkProxyFactory *factory)
voidsetRedirectPolicy(QNetworkRequest::RedirectPolicy policy)
voidsetStrictTransportSecurityEnabled(bool enabled)
voidsetTransferTimeout(int timeout)
(since 6.7) voidsetTransferTimeout(std::chrono::milliseconds duration = QNetworkRequest::DefaultTransferTimeout)
QList<QHstsPolicy>strictTransportSecurityHosts() const
virtual QStringListsupportedSchemes() const
inttransferTimeout() const
(since 6.7) std::chrono::millisecondstransferTimeoutAsDuration() const

署名

voidauthenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator)
voidencrypted(QNetworkReply *reply)
voidfinished(QNetworkReply *reply)
voidpreSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator)
voidproxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
voidsslErrors(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);

另请参阅:QNetworkRequestQNetworkReplyQNetworkProxy

成员类型文档

enum QNetworkAccessManager::Operation

指示此响应正在处理的操作。

常量描述
QNetworkAccessManager::HeadOperation1检索头操作(使用head创建)
QNetworkAccessManager::GetOperation2检索头和下载内容(使用get创建)
QNetworkAccessManager::PutOperation3上传内容操作(使用put创建)
QNetworkAccessManager::PostOperation4通过HTTP POST发送HTML表单的内容以便处理(使用post创建)
QNetworkAccessManager::DeleteOperation5删除内容操作(使用deleteResource创建)
QNetworkAccessManager::CustomOperation6自定义操作(使用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()。这将导致发出具有错误 AuthenticationRequiredErrorfinished() 信号。

注意:无法使用 QueuedConnection 连接到此信号,因为如果在信号返回时身份验证器尚未用新信息填充,连接将失败。

另请参阅: proxyAuthenticationRequired (),QAuthenticator::setUser () 和 QAuthenticator::setPassword ()。

bool QNetworkAccessManager::autoDeleteReplies() const

如果 QNetworkAccessManager 当前配置了自动删除 QNetworkReplies,则返回 true,否则返回 false。

另请参阅: setAutoDeleteRepliesQNetworkRequest::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())

如果enabledtrue,则内部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起引入。

向网络发送请求以获取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多部分消息。

另请参阅 QHttpMultiPartQHttpPart,以及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多部分消息。

另请参阅:QHttpMultiPartQHttpPart,以及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)。

另请参阅:getpostput,以及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多部分消息。

另请参阅 QHttpMultiPartQHttpPart,以及put().

void QNetworkAccessManager::setAutoDeleteReplies(bool shouldAutoDelete)

启用或禁用 QNetworkReplies 的自动删除。

shouldAutoDelete 设置为 true 与将所有传递给此实例的 QNetworkRequest::AutoDeleteReplyOnFinishAttribute 属性设置为 true 等效,除非该属性已在 QNetworkRequest 上明确设置。

另请参阅 autoDeleteRepliesQNetworkRequest::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::sslConfigurationQNetworkReply::ignoreSslErrors

QList<QHstsPolicy> QNetworkAccessManager::strictTransportSecurityHosts() const

返回 HTTP Strict Transport Security 策略列表。此列表可能与通过 addStrictTransportSecurityHosts 设置的初始列表不同,如果 HSTS 缓存已从 "Strict-Transport-Security" 响应头中更新。

另请参阅addStrictTransportSecurityHostsQHstsPolicy

[虚拟] QStringList QNetworkAccessManager::supportedSchemes() const

列出访问管理器支持的所有 URL 方案。

将此方法重新实现以在您的QNetworkAccessManager子类中提供您自己的支持方案。例如,当您的子类提供对新的协议的支持时,这是必要的。

int QNetworkAccessManager::transferTimeout() const

返回传输超时时间,单位为毫秒。

另请参阅 setTransferTimeout().

[自 6.7] std::chrono::milliseconds QNetworkAccessManager::transferTimeoutAsDuration() const

返回传输被取消的超时时间,如果没有数据交换。

默认持续时间为零,这意味着不使用超时。

此函数自Qt 6.7起引入。

另请参阅 setTransferTimeout(std::chrono::milliseconds).

© 2024 The Qt Company Ltd. 包含在内的文档贡献为其各自所有者的版权。此处提供的文档是根据自由软件基金会发布的GNU自由文档许可协议版本1.3的条款许可的。Qt及其相应标志是芬兰和/或世界其他地区的The Qt Company Ltd.的商标。所有其他商标均为其各自所有者的财产。