class QNetworkReply#

QNetworkReply 类包含使用 QNetworkAccessManager 发送的请求数据和头信息。更多......

Inheritance diagram of PySide6.QtNetwork.QNetworkReply

概述#

方法#

虚函数#

信号#

注意

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

详细说明#

.QNetworkReply 类包含与使用 QNetworkAccessManager 发送的请求相关联的数据和元数据。与 QNetworkRequest 类似,它包含一个 URL 和头部(以解析和原始形式),以及有关回复状态的某些信息和回复本身的内容。

.QNetworkReply 是一个顺序访问的 QIODevice,这意味着一旦从对象中读取数据,它就不会再由设备保留。因此,如果应用程序需要保留这些数据,它就必须负责保留这些数据。每当从网络上接收到更多数据并处理时,就会发出 readyRead() 信号。

.当接收到数据时,也会发出 downloadProgress() 信号,但其中包含的字节数量可能并不代表实际接收的字节数量,如果对内容进行了任何转换(例如,解压缩和去除协议开销)。

.尽管 QNetworkReply 是与回复内容相连的 QIODevice,但它也会发出 uploadProgress() 信号,以指示具有此类内容的操作的上传进度。

注意

不要删除与 errorOccurred()finished() 信号相连的槽中的对象。使用 deleteLater()。

class NetworkError#

表示请求处理过程中遇到的所有可能的错误条件。

常量

说明

QNetworkReply.NoError

没有错误条件。

注意

当HTTP协议返回重定向时,不会报告错误。您可以使用RedirectionTargetAttribute属性检查是否有重定向。

常量

说明

QNetworkReply.ConnectionRefusedError

远程服务器拒绝连接(服务器不接受请求)

QNetworkReply.RemoteHostClosedError

远程服务器在收到并处理完整回复之前关闭了连接

QNetworkReply.HostNotFoundError

未找到远程主机名(无效的主机名)

QNetworkReply.TimeoutError

连接到远程服务器超时

QNetworkReply.OperationCanceledError

操作通过调用abort()close()在完成前被取消。

QNetworkReply.SslHandshakeFailedError

SSL/TLS握手失败,无法建立加密通道。应该已发出sslErrors()信号。

QNetworkReply.TemporaryNetworkFailureError

由于从网络断开连接,连接中断了,但是系统已启动漫游到另一个接入点。应该重新提交请求,并在连接重新建立后立即处理。

QNetworkReply.NetworkSessionFailedError

由于从网络断开连接或启动网络失败,连接中断了。

QNetworkReply.BackgroundRequestNotAllowedError

由于平台策略,不允许进行后台请求。

QNetworkReply.TooManyRedirectsError

在跟随重定向时,达到了最大限制。默认限制设置为50或由QNetworkRequest::setMaxRedirectsAllowed()设置。(此值在5.6中引入。)

QNetworkReply.InsecureRedirectError

在跟随重定向时,网络访问API检测到从加密协议(https)到不加密协议(http)的重定向。(此值在5.6中引入。)

QNetworkReply.ProxyConnectionRefusedError

到代理服务器的连接被拒绝(代理服务器不接受请求)

QNetworkReply.ProxyConnectionClosedError

代理服务器在收到并处理完整回复之前关闭了连接

QNetworkReply.ProxyNotFoundError

未找到代理主机名(无效的代理主机名)

QNetworkReply.ProxyTimeoutError

到代理的连接超时或代理没有及时对发送的请求做出回应

QNetworkReply.ProxyAuthenticationRequiredError

代理要求验证以验证请求,但未接受提供的任何凭证(如果有任何)

QNetworkReply.ContentAccessDenied

拒绝访问远程内容(类似于HTTP错误403)

QNetworkReply.ContentOperationNotPermittedError

不允许在远程内容上执行请求的操作

QNetworkReply.ContentNotFoundError

服务器上未找到远程内容(类似于HTTP错误404)

QNetworkReply.AuthenticationRequiredError

远程服务器要求验证以提供内容,但提供的凭证不被接受(如果有任何)

QNetworkReply.ContentReSendError

请求需要重新发送,但失败了,例如因为无法再次读取上传数据。

QNetworkReply.ContentConflictError

请求无法完成,因为与资源当前状态冲突。

QNetworkReply.ContentGoneError

请求的资源在服务器上不再可用。

QNetworkReply.InternalServerError

服务器遇到了无法满足请求的意外条件。

QNetworkReply.OperationNotImplementedError

服务器不支持满足请求所需的功能。

QNetworkReply.ServiceUnavailableError

服务器当前无法处理请求。

QNetworkReply.ProtocolUnknownError

网络访问API无法满足请求,因为协议未知

QNetworkReply.ProtocolInvalidOperationError

请求的操作对于此协议无效

QNetworkReply.UnknownNetworkError

检测到未知相关网络错误

QNetworkReplyUnknownProxyError

检测到未知相关代理错误

QNetworkReplyUnknownContentError

检测到与远程内容相关的未知错误

QNetworkReplyProtocolFailure

检测到协议故障(解析错误、无效或意外响应等)

QNetworkReplyUnknownServerError

检测到与服务器响应相关的未知错误

另请参阅

error() errorOccurred()

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

parentQObject

使用父对象parent创建一个QNetworkReply对象。

您不能直接实例化QNetworkReply对象。请使用QNetworkAccessManager函数来执行此操作。

abstract abort()#

立即终止操作并关闭所有仍然打开的网络连接。正在进行的上传也会被终止。

finished()信号也将被发出。

另请参阅

close() finished()

attribute(code)#
参数:

codeAttribute

返回类型:

对象

返回与代码code关联的属性。如果未设置属性,则返回无效的QVariant (类型 QMetaType::UnknownType)。

您期望该函数返回的值应用了Attribute中列出的默认值。

另请参阅

setAttribute() Attribute

downloadProgress(bytesReceived, bytesTotal)#
参数:
  • bytesReceived – 整型

  • bytesTotal – 整型

当存在下载请求时,此信号被发出,表示下载部分的进度。如果此请求没有关联的下载,则此信号会将bytesReceivedbytesTotal的值都设置为0只发射一次。

bytesReceived参数表示已接收的字节数,而bytesTotal表示预期下载的总字节数。如果未知要下载的字节数,则bytesTotal将为-1。

bytesReceived等于bytesTotal时,下载完成。此时,bytesTotal将不再是-1。

请注意,bytesReceivedbytesTotal的值可能与size()不同,后者是通过read()或readAll()获得的字节数,或与header(ContentLengthHeader)的值不同。原因是下载过程中可能存在协议开销或数据可能被压缩。

encrypted()#

当 SSL/TLS 会话成功完成初始握手时,会发出此信号。在这个时候,尚未传输任何用户数据。可以使用此信号执行对证书链的附加检查,例如在网站证书更改时通知用户。如果回复不符合预期标准,则应通过连接到此信号的槽调用 abort() 来终止。当前使用的 SSL 配置可以使用 sslConfiguration() 方法检查。

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

另请参阅

encrypted()

error()
返回类型:

网络错误

返回在处理此请求期间发现的错误。如果没有发现错误,则返回 NoError

另请参阅

setError()

errorOccurred<>(arg__1)
参数:

arg__1 - NetworkError

当回复检测到处理错误时,会发出此信号。随后 finished() 信号可能随后发出,表示连接结束。

code 参数包含检测到的错误的代码。调用 errorString() 以获取错误条件的文本表示。

注意

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

另请参阅

error() errorString()

finished()

当回复完成处理时,会发出此信号。此信号发出后,将不再有更新到回复的数据或元数据。

除非调用了 close()abort(),否则回复仍将被打开以进行读取,因此可以通过对 read() 或 readAll() 的调用检索数据。特别是,如果没有由于 readyRead() 而调用了 read(),则调用 readAll() 将以 QByteArray 形式检索全部内容。

该信号与finished() 信号同时发出,其中该信号的回复参数是此对象。

注意

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

您还可以使用 isFinished() 在接收到 finished() 信号之前检查 QNetworkReply 是否已完成。

hasRawHeader(headerName)#
参数:

headerName – 字符串

返回类型:

布尔值

如果远程服务器发送了名为 headerName 的原始头部,则返回 true

注意

在 Qt 6.7 之前的版本中,此函数仅接受 QByteArray。

另请参阅

rawHeader()

header(header)#
参数:

headerKnownHeaders

返回类型:

对象

如果远程服务器发送了 header 所指的已知头部,则返回该头部的值。如果没有发送该头部,则返回一个无效的 QVariant。

ignoreSslErrors()#

如果调用此函数,则会忽略与网络连接相关的 SSL 错误,包括证书验证错误。

警告

请确保用户检查由sslErrors()信号报告的错误,并仅在用户确认继续操作的情况下调用此方法。如果出现意外错误,应终止响应。如果没有检查实际错误就调用此方法,可能会给您的应用程序带来安全风险。请谨慎使用!

此函数可以从连接到sslErrors()信号的槽功能中调用,该信号表示已发现哪些错误。

注意

如果QNetworkAccessManager启用了HTTP严格传输安全,则此函数不起作用。

ignoreSslErrors(errors)
参数:

errors – QSslError列表

警告

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

这是一个重载函数。

如果调用此函数,将在errors中忽略提供的SSL错误。

注意

因为大多数SSL错误都与证书相关,所以对于大多数错误,您必须设置与该SSL错误相关的预期证书。例如,如果您想向使用自签名证书的服务器发出请求,请考虑以下代码片段

cert = QSslCertificate.fromPath("server-certificate.pem")
error = QSslError(QSslError.SelfSignedCertificate, cert.at(0))
expectedSslErrors = QList()
expectedSslErrors.append(error)
reply = manager.get(QNetworkRequest(QUrl("https://server.tld/index.html")))
reply.ignoreSslErrors(expectedSslErrors)
# here connect signals etc.

对此函数的多次调用将替换由先前调用传入的错误列表。通过调用此函数并传入空列表,您可以清除您想要忽略的错误列表。

注意

如果QNetworkAccessManager启用了HTTP严格传输安全,则此函数不起作用。

ignoreSslErrorsImplementation(arg__1)#
参数:

arg__1 – QSslError列表

此虚方法是提供以覆盖ignoreSslErrors()行为的能力。《ignoreSslErrors》是此方法的公共封装。上文中“errors”包含用户希望忽略的错误。

另请参阅

ignoreSslErrors()

isFinished()#
返回类型:

布尔值

当回复完成或被中止时,返回 true

另请参阅

isRunning()

isRunning()#
返回类型:

布尔值

当请求仍在处理且回复尚未完成或被中止时,返回 true

另请参阅

isFinished()

manager()#
返回类型:

QNetworkAccessManager

返回创建此 QNetworkReply 对象所使用的 QNetworkAccessManager。最初,它也是父对象。

metaDataChanged()#

每当本回复的元数据发生变化时,都会发出此信号。元数据是指非内容(数据)的信息,包括网络头。在大多数情况下,在接收到数据的第一字节时,元数据将被完全了解。然而,在处理数据期间,接收头或其他元数据的更新也是可能的。

operation()#
返回类型:

操作

返回为该回复发布操作。

另请参阅

setOperation()

preSharedKeyAuthenticationRequired(authenticator)#
参数:

authenticatorQSslPreSharedKeyAuthenticator

如果 SSL/TLS 握手协商 PSK 加密套件,则发出此信号,因此需要 PSK 身份验证。

使用 PSK 时,客户端必须向服务器发送有效的身份和一个有效的预先共享密钥,以便 SSL 握手继续。应用程序可以通过将此信号连接到槽来提供此信息,通过根据其需求填充传递的 authenticator 对象。

注意

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

注意

authenticator 对象由回复拥有,应用程序必须删除。

rawHeader(headerName)#
参数:

headerName – 字符串

返回类型:

QByteArray

返回远程服务器发送的头部headerName的原始内容。如果没有这样的头部,则返回一个空字节数组,这可能与空头部难以区分。使用hasRawHeader()来验证服务器是否发送了这样的头部字段。

注意

在 Qt 6.7 之前的版本中,此函数仅接受 QByteArray。

rawHeaderList()#
返回类型:

QByteArray列表

返回远程服务器发送的头部字段列表,顺序与发送顺序相同。重复头部将被合并,并替换最后一个重复的头部。

rawHeaderPairs()#
返回类型:

std.pair QByteArray, QByteArray列表

返回原始头部对列表。

readBufferSize()#
返回类型:

int

返回读取缓冲区的大小(以字节为单位)。

另请参阅

setReadBufferSize()

redirectAllowed()#

当客户端代码处理redirected()信号时,已经验证了新的URL,它发出此信号以允许进行重定向。此协议适用于将重定向策略设置为UserVerifiedRedirectPolicy的网络请求。

redirected(url)#
参数:

urlQUrl

如果在请求中未设置ManualRedirectPolicy,并且服务器以包含在“location”头的有效URL的3xx状态(特别是301、302、303、305、307或308状态代码)响应,则发出此信号,这表明HTTP重定向。该url参数包含由服务器在“location”头返回的新重定向URL。

另请参阅

RedirectPolicy

request()#
返回类型:

QNetworkRequest

返回发送此回复的请求。请注意,请求的URL可能与回复的URL不同。

另请参阅

url() url() setRequest()

requestSent()#

在请求发送时,会发出1次或多次此信号。这对于自定义进度或超时处理非常有用。

setAttribute(code, value)#
参数:

将属性code设置为值value。如果code之前已设置,则将覆盖它。如果value是无效的QVariant,则将取消设置此属性。

setError(errorCode, errorString)#
参数:

将错误条件设置为errorCode。使用errorString设置人类可读的消息。

调用setError()不会发出errorOccurredNetworkError)信号。

另请参阅

error() errorString()

setFinished(arg__1)#
参数:

arg__1 – bool

将回复设置为 finished

在此设置后,回复的数据不得更改。

另请参阅

finished() isFinished()

setHeader(header, value)#
参数:

将已知的头 header 设置为值 value。相应的原始头形式也会被设置。

setOperation(operation)#
参数:

operationOperation

将此对象的相关运算设置为 operation。此值将由 operation() 返回。

注意

应该在此对象创建时设置运算,并在之后不再更改。

另请参阅

operation() setRequest()

setRawHeader(headerName, value)#
参数:

将原始头 headerName 设置为值 value。如果之前已设置了 headerName,则将覆盖它。具有相同名称的多个 HTTP 头功能上等价于一个单一的具有粘合值的头,用逗号分隔。

如果 headerName 与已知头匹配,则将解析 value 值,并将相应的解析形式也设置。

setReadBufferSize(size)#
参数:

size – int

将读取缓冲区的大小设置为 size 字节。读取缓冲区是网络下载数据前持有的缓冲区,在用 QIODevice::read() 读取之前。设置缓冲区大小为 0 将使缓冲区的大小无限制。

QNetworkReply 会尝试在该缓冲区满时停止从网络读取(即,bytesAvailable() 返回 size 或更多),从而降低下载速率。如果缓冲区的大小不受限制,QNetworkReply 将尽可能地从网络快速下载。

setReadBufferSize() 不同,QNetworkReply 不能保证读取缓冲区大小的精度。也就是说,bytesAvailable() 可以返回大于 size 的值。

另请参阅

readBufferSize()

setRequest(request)#
参数:

requestQNetworkRequest

将此对象的关联请求设置为 request。此值将由 request() 返回。

注意

应在创建此对象时设置请求,并不要再更改。

另请参阅

request() setOperation()

setSslConfiguration(configuration)#
参数:

配置QSslConfiguration

若可能,将该请求关联的网络连接的SSL配置设置为config

另请参阅

sslConfiguration()

setSslConfigurationImplementation(arg__1)#
参数:

arg__1QSslConfiguration

此虚方法提供覆盖 setSslConfiguration() 行为的功能。此方法的公共包装器是 setSslConfiguration() 。如果您覆盖了此方法,请使用 configuration 来设置SSL配置。

setUrl(url)#
参数:

urlQUrl

设置正在处理的URL为url。通常,该URL与已提交的请求的URL一致,但出于各种原因它可能不同(例如,将文件路径转换为绝对路径或规范路径)。

另请参阅

url() request() url()

socketStartedConnecting()#

在发送请求之前,当套接字正在连接时,此信号会发射0次或多次。这对于自定义进度或超时处理很有用。

sslConfiguration()#
返回类型:

QSslConfiguration

如果使用了SSL,则返回与此回复关联的SSL配置和状态。它将包含远程服务器的证书、其证书链(直至证书颁发机构)以及正在使用的加密密码。

在发出 sslErrors() 信号时,将对对方的证书及其证书链进行了解。

另请参阅

setSslConfiguration()

sslConfigurationImplementation(arg__1)#
参数:

arg__1QSslConfiguration

此虚方法提供了一种覆盖 sslConfiguration() 行为的方式。 sslConfiguration() 是该方法的公共包装器。配置将返回到 configuration

sslErrors(errors)#
参数:

errors – QSslError列表

当 SSL/TLS 会话在建立过程中遇到错误时,会发射此信号,包括证书验证错误。参数 errors 包含了错误列表。

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

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

uploadProgress(bytesSent, bytesTotal)#
参数:
  • bytesSent – int

  • bytesTotal – 整型

如果此网络请求关联了上传部分,则发射此信号以指示上传进度。如果没有与此请求关联的上传,则不会发射此信号。

参数 bytesSent 表示已上传的字节数,而 bytesTotal 表示要上传的总字节数。如果无法确定要上传的字节数,则 bytesTotal 将为 -1。

bytesSent 等于 bytesTotal 时,上传完成。此时,bytesTotal 不会是 -1。

另请参阅

downloadProgress()

url()#
返回类型:

QUrl

返回下载或上传内容的 URL。请注意,URL 可能与原始请求的 URL 不同。如果请求中启用了重定向,则此函数返回当前网络 API 访问的 URL,即请求重定向到的资源的 URL。