class QNetworkAccessManager#

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

Inheritance diagram of PySide6.QtNetwork.QNetworkAccessManager

概要#

方法#

虚函数#

槽函数#

信号#

注意

本文档可能包含自动从C++转换为Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果发现翻译有问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们

详细描述#

警告

本节包含自动从C++转换为Python的代码片段,可能包含错误。

网络访问API围绕一个QNetworkAccessManager对象构建,该对象保存其发送请求的常用配置和设置。它包含代理和缓存配置,以及与此类问题相关的信号,以及可以用于监控网络操作进度的回复信号。一个QNetworkAccessManager实例对于整个Qt应用程序来说已经是足够的。由于QNetworkAccessManager基于QObject,它只能在属于的线程中使用。

创建一个QNetworkAccessManager对象后,应用程序可以使用它通过网络发送请求。提供了一系列标准函数,这些函数接受一个请求和可选数据,并返回一个QNetworkReply对象。返回的对象用于获取响应相应请求时返回的任何数据。

以下是一个简单的从网络下载数据的示例:

manager = QNetworkAccessManager(self)
manager.finished.connect(
        self.replyFinished)
manager.get(QNetworkRequest(QUrl("http://qt-project.org")))

QNetworkAccessManager有一个异步API。当上面的replyFinished槽被调用时,它接受的参数是一个包含下载数据和元数据的(头部等)QNetworkReply对象。

注意

请求完成后,用户必须在合适的时间删除QNetworkReply对象。不要直接在连接到finished()的槽中删除它。您可以使用deleteLater()函数。

注意

QNetworkAccessManager会对接收到的请求进行排队。并行执行的请求数量取决于协议。目前,对于桌面平台上的HTTP协议,对于每个主机/端口组合,执行6个并行请求。

以下是更复杂的示例,假设管理器已经存在:

request = QNetworkRequest()
request.setUrl(QUrl("http://qt-project.org"))
request.setRawHeader("User-Agent", "MyOwnBrowser 1.0")
reply = manager.get(request)
reply.readyRead.connect(self.slotReadyRead)
reply.errorOccurred.connect(
        self.slotError)
reply.sslErrors.connect(
        self.slotSslErrors)
Operation#

指示此回复正在处理的操作。

常量

描述

QNetworkAccessManager.HeadOperation

获取头部信息操作(用 head() 创建)

QNetworkAccessManager.GetOperation

获取头部信息和下载内容(用 get() 创建)

QNetworkAccessManager.PutOperation

上传内容操作(用 put() 创建)

QNetworkAccessManager.PostOperation

通过 HTTP POST 发送 HTML 表单的内容进行处理(用 post() 创建)

QNetworkAccessManager.DeleteOperation

删除内容操作(用 deleteResource() 创建)

QNetworkAccessManager.CustomOperation

自定义操作(用 sendCustomRequest() 创建)

另请参阅

operation()

__init__([parent=None])#
参数:

parentQObject

构建一个 QNetworkAccessManager 对象,这是网络访问 API 的核心,并将 parent 作为父对象。

addStrictTransportSecurityHosts(knownHosts)#
参数:

knownHosts – .QHstsPolicy 列表

将 HTTP Strict Transport Security 政策添加到 HSTS 缓存中。knownHosts 包含具有 QHstsPolicy 信息的已知主机。

注意

如果之前存在,过期策略将从一个已知主机中删除。

注意

在处理HTTP响应时,QNetworkAccessManager 还可以更新HSTS缓存,移除或更新现有策略或引入新的 knownHosts。因此当前实现是由服务器驱动的,客户端代码可以为 QNetworkAccessManager 提供先前已知或发现的政策,但这些信息可以由“ Strict-Transport-Security”响应头覆盖。

authenticationRequired(reply, authenticator)#
参数:

每当最终服务器在交付请求的内容之前请求认证时,都会发出此信号。与此信号连接的槽应填充 authenticator 对象中的凭据,以获取内容(可通过检查 reply 对象来确定)。

QNetworkAccessManager 将在内部缓存凭据,并如果服务器再次要求认证,则将发送相同的值,而不发出 authenticationRequired() 信号。如果它拒绝凭据,则将再次发出此信号。

注意

要确保请求不发送凭据,不要在 authenticator 对象上调用 setUser() 或 setPassword()。这将导致 finished() 信号以带有错误 QNetworkReply 的形式发出 AuthenticationRequiredError

注意

无法使用 QueuedConnection 连接到此信号,因为如果信号返回时认证器尚未用新信息填充,连接将失败。

autoDeleteReplies()#
返回类型::

bool

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

cache()#
返回类型::

QAbstractNetworkCache

返回用于存储从网络获得的数据的缓存。

另请参阅

setCache()

clearAccessCache()#

刷新认证数据和网络连接的内部缓存。

此函数在进行自动测试时非常有用。

另请参阅

clearConnectionCache()

clearConnectionCache()#

刷新网络连接的内部缓存。与 clearAccessCache() 相比,保留了认证数据。

另请参阅

clearAccessCache()

connectToHost(hostName[, port=80])#
参数:
  • hostName – str

  • port – int

在端口 port初始化对由 hostName 指定的主机的连接。此函数在发起 HTTP 请求之前完成对服务器的 TCP 握手,从而降低网络延迟。

注意

此函数没有报告错误的可能性。

connectToHostEncrypted(hostName[, port=443[, sslConfiguration=QSslConfiguration.defaultConfiguration()]])#
参数:

使用sslConfiguration在端口号port处启动到由hostName指定的主机的连接。此函数在发起HTTPS请求之前,完成到主机的前置TCP和SSL握手,从而降低了网络延迟。

注意

通过在sslConfiguration上调用setAllowedNextProtocols(),可以预先连接一个HTTP/2连接。在允许的协议列表中包含QSslConfiguration::ALPNProtocolHTTP2时,就可以执行这一操作。在HTTP/2的情况下,每台主机只需要一个连接,即对同一主机调用此方法多次不会导致网络事务更快。

注意

此函数没有报告错误的可能性。

connectToHostEncrypted(hostName, port, sslConfiguration, peerName)
参数:
  • hostName – str

  • port – int

  • sslConfigurationQSslConfiguration

  • peerName – str

这是一个重载函数。

使用sslConfiguration在端口号port处启动到由hostName指定的主机的连接,peerName设置为用于证书验证的主机名。在发起HTTPS请求之前,此函数可以完成到主机的前置TCP和SSL握手,从而降低网络延迟。

注意

通过在sslConfiguration上调用setAllowedNextProtocols(),可以预先连接一个HTTP/2连接。在允许的协议列表中包含QSslConfiguration::ALPNProtocolHTTP2时,就可以执行这一操作。在HTTP/2的情况下,每台主机只需要一个连接,即对同一主机调用此方法多次不会导致网络事务更快。

注意

此函数没有报告错误的可能性。

cookieJar()#
返回类型::

QNetworkCookieJar

返回用于存储从网络获取的cookie以及即将发送的cookie的QNetworkCookieJar

另请参阅

setCookieJar()

createRequest(op, request[, outgoingData=None])#
参数:
返回类型::

QNetworkReply

返回一个新 QNetworkReply 对象来处理操作 op 和请求 originalReq。对于 Get 和 Head 请求,设备 outgoingData 总是 0,但在那些操作中(QByteArray 的变体将传递 QBuffer 对象)将作为 post()put() 的参数。

默认实现调用在 setCookieJar() 中设置的 cookie jar 的 cookiesForUrl() 来获取要发送到远程服务器的 cookie。

返回的对象必须处于打开状态。

deleteResource(request)#
参数:

requestQNetworkRequest

返回类型::

QNetworkReply

向由 request 的 URL 标识的资源发送删除请求。

注意

该功能目前仅适用于 HTTP,执行 HTTP 删除请求。

enableStrictTransportSecurityStore(enabled[, storeDir=""])#
参数:
  • enabled – bool

  • storeDir – str

如果 enabledtrue,则内部 HSTS 缓存将使用持久存储来读取和写入 HSTS 政策。 storeDir 定义此存储的位置。默认位置由 QStandardPaths::CacheLocation 定义。如果没有可写的 QStandartPaths::CacheLocation 并且 storeDir 是空字符串,则存储位置位于程序的当前工作目录。

注意

如果启用持久存储时 HSTS 缓存已存在 HSTS 政策,则将在存储中保留这些政策。如果缓存和存储都包含相同的已知主机,则缓存中的策略被认为是更新的(因此将覆盖存储中的先前值)。如果不希望这种行为,请在启用 Strict Transport Security 之前启用 HSTS 存储。默认情况下,HSTS 政策的持久存储已禁用。

encrypted(reply)#
参数:

replyQNetworkReply

当SSL/TLS会话成功完成初始握手时,将触发此信号。此时,尚未传输用户数据。可以使用该信号执行证书链的额外检查,例如在网站证书更改时通知用户。reply参数指定了负责哪个网络响应。如果响应不符合预期标准,应通过连接到此信号的槽调用abort()来终止它。可以使用sslConfiguration()方法检查当前使用的SSL配置。

内部,QNetworkAccessManager可能对一个服务器开启多个连接,以便并行处理请求。这些连接可以被重用,这意味着加密()信号可能不会发出。这意味着您只能保证在QNetworkAccessManager的生命周期内接收到针对网站的第一连接的第一个此信号。

另请参阅

encrypted() encrypted()

finished(reply)#
参数:

replyQNetworkReply

每当挂起的网络响应完成时,都会触发此信号。reply参数将包含刚刚完成的响应的指针。此信号与finished()信号同时发出。

有关对象将处于的状态信息,请参阅finished()

注意

不要在连接到此信号的槽中删除reply对象。使用deleteLater()。

另请参阅

finished() error()

get(request)#
参数:

requestQNetworkRequest

返回类型::

QNetworkReply

向目标request发送请求以获取其内容,并返回一个新的用于读取的QNetworkReply对象。每当有新数据到达时,该对象将发出readyRead()信号。

内容及其关联的标题都会被下载。

get(request)data)
参数:
返回类型::

QNetworkReply

这是一个重载函数。

注意

带有消息体的GET请求不会被缓存。

注意

如果请求被重定向,只有在状态码为307或308时,消息体才会保留。

get(request)data)
参数:
返回类型::

QNetworkReply

这是一个重载函数。

注意

带有消息体的GET请求不会被缓存。

注意

如果请求被重定向,只有在状态码为307或308时,消息体才会保留。

head(request)#
参数:

requestQNetworkRequest

返回类型::

QNetworkReply

向目标request发送请求以获取网络标题,并返回一个包含这些标题的新QNetworkReply对象。

该函数以关联的HTTP请求(HEAD)命名。

isStrictTransportSecurityEnabled()#
返回类型::

bool

如果启用了HTTP Strict Transport Security (HSTS),则返回true。默认情况下,HSTS是禁用的。

isStrictTransportSecurityStoreEnabled()#
返回类型::

bool

如果HSTS缓存使用持久存储来加载和存储HSTS策略,则返回true。

post(request)data)#
参数:
返回类型::

QNetworkReply

这是一个重载函数。

data字节数组的内容发送到由request指定的目标。

post(request, multiPart)
参数:
返回类型::

QNetworkReply

这是一个重载函数。

multiPart 消息的内容发送到由 request 指定的目的地。

这可以用来通过 HTTP 发送 MIME 多部分消息。

post(request, data)
参数:
返回类型::

QNetworkReply

向由 request 指定的目的地发送 HTTP POST 请求,并返回一个打开用于读取的新的 QNetworkReply 对象,该对象将包含服务器发送的回复。数据设备的内容将上传到服务器。

data 必须可读取,并且必须在发出对该回复的 finished() 信号之前保持有效。

注意

在 HTTP 和 HTTPS 以外的协议上发送 POST 请求是未定义的,并且可能会失败。

preSharedKeyAuthenticationRequired(reply, authenticator)#
参数:

如果 SSL/TLS 握手协商 PSK 密码套件,则发出此信号,因此需要进行 PSK 身份验证。响应对象是协商此类密码套件的 QNetworkReply

在使用PSK时,客户端必须向服务器发送有效的身份信息和有效的预共享密钥,以便SSL握手得以继续。应用程序可以通过连接到该信号的槽来提供这些信息,根据需要填写传递的认证器对象。

注意

忽略此信号或未能提供所需的凭证,会导致握手失败,因此连接将被终止。

注意

认证器对象由回复拥有,应用程序不得删除。

代理()#
返回类型::

QNetworkProxy

返回使用此QNetworkAccessManager对象发送的请求将使用的QNetworkProxy。代理的默认值为默认代理

代理身份验证需要(代理, 认证器)#
参数:

每当代理请求身份验证而QNetworkAccessManager找不到有效的缓存的凭证时,都会发出此信号。连接到此信号的槽应该填写QNetworkAccessManager中的代理proxy的凭证。

QNetworkAccessManager会在内部缓存凭证。下次代理请求身份验证时,QNetworkAccessManager将自动发送相同的凭证,而无需再次发出proxyAuthenticationRequired信号。

如果代理拒绝凭证,QNetworkAccessManager将再次发出信号。

proxyFactory()#
返回类型::

QNetworkProxyFactory

返回此 QNetworkAccessManager 对象用于确定用于请求的代理的代理工厂。

请注意,此函数返回的指针由 QNetworkAccessManager 管理,并且可能随时被删除。

另请参阅

setProxyFactory() proxy()

put(request, multiPart)#
参数:
返回类型::

QNetworkReply

这是一个重载函数。

multiPart 消息的内容发送到由 request 指定的目的地。

这可以用来通过 HTTP 发送 MIME 多部分消息。

put(request, data)
参数:
返回类型::

QNetworkReply

data 的内容上传到目标 request,并返回一个新的 QNetworkReply 对象,该对象将打开以获取回复。

data 必须在调用此函数时打开以供读取,并且必须在为此回复发出 finished() 信号之前保持有效。

从返回对象中是否可以读取任何内容取决于协议。对于 HTTP,服务器可能会发送一个小型 HTML 页面,指示上传成功(或未成功)。其他协议的回复可能包含内容。

注意

对于 HTTP,此请求将发送一个 PUT 请求,而大多数服务器不允许。表单上传机制,包括通过 HTML 表单上传文件,使用 POST 机制。

put(request, data)
参数:
返回类型::

QNetworkReply

这是一个重载函数。

data字节数组的内容发送到由request指定的目标。

redirectPolicy()#
返回类型::

重定向策略

返回在创建新请求时使用的重定向策略。

sendCustomRequest(request, verb, multiPart)#
参数:
返回类型::

QNetworkReply

这是一个重载函数。

向由 request 的 URL 指定的服务器发送自定义请求。

multiPart 消息的内容发送到由 request 指定的目的地。

这可以用于发送适用于自定义动词的 MIME 多部分消息。

sendCustomRequest(request, verb[, data=None])
参数:
返回类型::

QNetworkReply

向由 request 的 URL 指定的服务器发送自定义请求。

发送服务器有效的动词 verb 的责任在于用户。

此方法提供了发送除通过 get()post() 等公共动词提供的动词以外的动词的手段,例如发送 HTTP OPTIONS 命令。

如果 data 不为空,则 data 设备的内容将上传到服务器;在这种情况下,data 必须为打开读取,且必须在为当前响应发出的 finished() 信号之前保持有效。

注意

当前此功能仅适用于 HTTP(S)。

sendCustomRequest(request, verb, data)
参数:
返回类型::

QNetworkReply

这是一个重载函数。

data字节数组的内容发送到由request指定的目标。

setAutoDeleteReplies(autoDelete)#
参数:

autoDelete - bool

启用或禁用自动删除 QNetworkReplies .

shouldAutoDelete 设置为 true 与在传递给此 QNetworkAccessManager 实例的所有 未来 QNetworkRequests 上设置 AutoDeleteReplyOnFinishAttribute 属性为 true 相同,除非该属性已在 QNetworkRequest 上显式设置。

setCache(cache)#
参数:

cache - QAbstractNetworkCache

设置管理器的网络缓存为指定的 cache 。缓存用于管理器分配的所有请求。

使用此函数将网络缓存对象设置为实现了额外功能(如将 cookie 保存到永久存储)的类。

注意

QNetworkAccessManager 将拥有 cache 对象。

QNetworkAccessManager 默认不设置缓存。Qt 提供了一个简单的磁盘缓存 QNetworkDiskCache ,可用于此。

另请参阅

cache() CacheLoadControl

setCookieJar(cookieJar)#
参数:

cookieJarQNetworkCookieJar

将管理器的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。为了实现您自己的安全策略,覆盖 cookiesForUrl()setCookiesFromUrl() 虚拟函数。这些函数在 QNetworkAccessManager 侦测到新的cookie时被调用。

setProxy(proxy)#
参数:

代理QNetworkProxy

将用于将来请求的代理设置为 proxy。这不会影响已发送的请求。如果代理请求身份验证,将发出 proxyAuthenticationRequired() 信号。

此功能配置的代理集将用于所有由QNetworkAccessManager发出的请求。在某些情况下,根据所发送请求的类型或目标主机可能需要选择不同的代理。如果是这种情况,您可以考虑使用setProxyFactory()

另请参阅

proxy()

setProxyFactory(factory)#
参数:

strong>factory - QNetworkProxyFactory

设置此类的代理工厂为 factory。代理工厂用于确定用于给定请求的更具体的代理列表,而不是尝试为所有请求使用相同的代理值。

QNetworkAccessManager发出的所有查询都将有类型 UrlRequest .

例如,代理工厂可以应用以下规则

  • 如果目标地址在本地网络中(例如,如果主机名不包含点或它是在组织的IP地址范围内的IP地址),则返回 NoProxy

  • 如果请求是FTP,则返回FTP代理

  • 如果请求是HTTP或HTTPS,则返回HTTP代理

  • 否则返回SOCKSv5代理服务器

对象 factory 的生命周期将由 QNetworkAccessManager 管理。当需要时,它会删除对象。

注意

如果使用setProxy()设置了特定的代理,则将不使用工厂。

setRedirectPolicy(policy)#
参数:

strong>policy - RedirectPolicy

将管理器的重定向策略设置为指定的 policy。此策略将影响由管理器创建的所有后续请求。

使用此函数在管理器级别上启用或禁用HTTP重定向。

注意

在创建请求时,QNetworkRequest::RedirectAttributePolicy具有最高优先级,其次是管理器的策略。

默认值为 NoLessSafeRedirectPolicy 。建议依赖于手动处理重定向的客户端在他们的代码中明确设置此策略。

setStrictTransportSecurityEnabled(enabled)#
参数:

enabled – bool

如果 enabledtrueQNetworkAccessManager 将遵循HTTP严格传输安全策略(HSTS,RFC6797)。处理请求时,QNetworkAccessManager 会自动将“http”方案替换为“https”,并为HSTS主机使用安全传输。如果显式设置,端口80将替换为端口443。

启用HSTS时,对于每个包含HSTS标头并通过安全传输接收的HTTP响应,QNetworkAccessManager 将更新其HSTS缓存,牢记具有有效策略的主机或删除过期或禁用的HSTS策略的主机。

setTransferTimeout(timeout)#
参数:

timeout – int

timeout 设置为传输超时的毫秒数。

另请参阅

milliseconds()) transferTimeout() transferTimeoutAsDuration()

sslErrors(reply, errors)#
参数:

如果在SSL/TLS会话设置过程中遇到错误,包括证书验证错误,则发出此信号。参数 errors 包含错误列表,而 reply 是遇到这些错误的 QNetworkReply

要表示错误不是致命的,并且应该继续连接,从连接到此信号的槽中调用ignoreSslErrors()函数。如果不调用它,则在进行任何数据交换(包括URL)之前,SSL会话将被拆解。

此信号可用于向用户显示错误消息,表示安全可能会受到损害,并显示SSL设置(有关获取信息,请参阅sslConfiguration())。如果用户在分析远程证书后决定继续,则槽应调用ignoreSslErrors()。

strictTransportSecurityHosts()#
返回类型::

QHstsPolicy列表

返回HTTP严格传输安全策略的列表。如果HSTS缓存已通过“Strict-Transport-Security”响应头更新,则此列表可能与通过addStrictTransportSecurityHosts()设置的初始列表不同。

supportedSchemes()#
返回类型::

字符串列表

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

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

supportedSchemesImplementation()#
返回类型::

字符串列表

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

不应直接调用此函数;请使用supportedSchemes()

由于二进制兼容性限制,Qt 5中的supportedSchemes()方法(Qt 5.2中引入)不是虚拟的,但现在它是。请覆盖supportedSchemes方法,而不是这个方法。

另请参阅

supportedSchemes()

transferTimeout()#
返回类型::

int

返回用于传输的的超时时间,以毫秒为单位。

另请参阅

setTransferTimeout()