PySide6.QtNetwork.QNetworkReply

class QNetworkReply

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

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

检测到未知的网络相关错误

QNetworkReply.UnknownProxyError

检测到未知的代理相关错误

QNetworkReply.UnknownContentError

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

QNetworkReply.ProtocolFailure

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

QNetworkReply.UnknownServerError

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

另请参阅

error() errorOccurred()

__init__([parent=None])
Parameters:

父对象QObject

创建一个带有父对象 parentQNetworkReply 对象。

你不能直接实例化QNetworkReply对象。使用QNetworkAccessManager函数来实现这一点。

abstract abort()

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

finished() 信号也将被发出。

另请参阅

close() finished()

attribute(code)
Parameters:

代码属性

Return type:

对象

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

你可以期望Attribute中列出的默认值将应用于此函数返回的值。

另请参阅

setAttribute() Attribute

downloadProgress(bytesReceived, bytesTotal)
Parameters:
  • bytesReceived – int

  • bytesTotal – int

此信号用于指示此网络请求的下载部分的进度(如果有)。如果此请求没有关联的下载,此信号将发出一次,bytesReceivedbytesTotal 的值均为 0。

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

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

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

encrypted()

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

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

另请参阅

encrypted() encrypted()

error()
Return type:

NetworkError

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

另请参阅

setError()

errorOccurred(code)
Parameters:

代码NetworkError

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

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

注意

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

另请参阅

error() errorString()

finished()

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

除非调用了close()abort(),否则回复仍然可以读取,因此可以通过调用read()或readAll()来检索数据。特别是,如果没有因为readyRead()而调用read(),那么调用readAll()将检索QByteArray中的全部内容。

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

注意

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

你也可以使用isFinished()来检查QNetworkReply是否已经完成,即使在你收到finished()信号之前。

hasRawHeader(headerName)
Parameters:

headerName – str

Return type:

布尔

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

注意

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

另请参阅

rawHeader()

header(header)
Parameters:

头部KnownHeaders

Return type:

对象

返回已知标头 header 的值,如果该标头由远程服务器发送。如果未发送该标头,则返回无效的 QVariant。

headers()
Return type:

QHttpHeaders

返回由远程服务器发送的头部信息。

ignoreSslErrors()

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

警告

请务必始终让用户检查由sslErrors()信号报告的错误,并且只有在用户确认继续操作是安全的情况下才调用此方法。如果出现意外错误,应中止回复。在不检查实际错误的情况下调用此方法很可能会对您的应用程序构成安全风险。请谨慎使用!

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

注意

如果为QNetworkAccessManager启用了HTTP严格传输安全,此函数将无效。

ignoreSslErrors(errors)
Parameters:

错误 – .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(errors)
Parameters:

错误 – .QSslError 列表

此虚拟方法用于启用覆盖ignoreSslErrors()行为的功能。ignoreSslErrors()是该方法的公共包装器。errors包含用户希望忽略的错误。

另请参阅

ignoreSslErrors()

isFinished()
Return type:

布尔

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

另请参阅

isRunning()

isRunning()
Return type:

布尔

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

另请参阅

isFinished()

manager()
Return type:

QNetworkAccessManager

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

metaDataChanged()

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

operation()
Return type:

操作

返回为此回复发布的操作。

另请参阅

setOperation()

preSharedKeyAuthenticationRequired(authenticator)
Parameters:

认证器QSslPreSharedKeyAuthenticator

如果SSL/TLS握手协商了一个PSK密码套件,则会发出此信号,因此需要PSK认证。

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

注意

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

注意

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

rawHeader(headerName)
Parameters:

headerName – str

Return type:

QByteArray

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

注意

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

rawHeaderList()
Return type:

.list of QByteArray

返回远程服务器发送的头部字段列表,按照它们被发送的顺序排列。重复的头部字段会被合并,并取代后者的重复项。

rawHeaderPairs()
Return type:

std.pairQByteArray的列表,QByteArray

返回原始头对的列表。

readBufferSize()
Return type:

整数

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

另请参阅

setReadBufferSize()

redirectAllowed()

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

redirected(url)
Parameters:

urlQUrl

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

另请参阅

RedirectPolicy

request()
Return type:

QNetworkRequest

返回为此回复发布的请求。特别要注意的是,请求的URL可能与回复的URL不同。

另请参阅

url() url() setRequest()

requestSent()

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

setAttribute(code, value)
Parameters:
  • code属性

  • value – 对象

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

setError(errorCode, errorString)
Parameters:

将错误条件设置为errorCode。可读的消息通过errorString设置。

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

另请参阅

error() errorString()

setFinished(finished)
Parameters:

已完成 – bool

将回复设置为finished

设置此内容后,回复数据不得更改。

另请参阅

finished() isFinished()

setHeader(header, value)
Parameters:

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

setHeaders(newHeaders)
Parameters:

newHeadersQHttpHeaders

newHeaders设置为此次网络回复的头部信息,覆盖之前设置的任何头部信息。

如果某些标头与已知标头对应,它们将被解析,并且相应的解析形式也将被设置。

另请参阅

headers() KnownHeaders

setOperation(operation)
Parameters:

操作Operation

将此对象的关联操作设置为operation。此值将由operation()返回。

注意

此操作应在创建此对象时设置,并且不应再次更改。

另请参阅

operation() setRequest()

setRawHeader(headerName, value)
Parameters:

将原始头 headerName 设置为值 value。如果 headerName 之前已设置,则会被覆盖。多个相同名称的 HTTP 头在功能上等同于一个单一的头,其值由逗号分隔连接。

如果 headerName 匹配到一个已知的头部,值 value 将被解析,并且相应的解析形式也将被设置。

setReadBufferSize(size)
Parameters:

size – int

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

QNetworkReply 将尝试在缓冲区满时停止从网络读取数据(即,bytesAvailable() 返回 size 或更多),从而导致下载速度也会减慢。如果缓冲区大小不受限制,QNetworkReply 将尝试尽可能快地从网络下载数据。

setReadBufferSize()不同,QNetworkReply无法保证读取缓冲区大小的精确性。也就是说,bytesAvailable()可能会返回比size更多的字节。

另请参阅

readBufferSize()

setRequest(request)
Parameters:

请求QNetworkRequest

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

注意

请求应在创建此对象时设置,之后不应再次更改。

另请参阅

request() setOperation()

setSslConfiguration(configuration)
Parameters:

配置QSslConfiguration

如果可能,将与此请求关联的网络连接的SSL配置设置为config的配置。

另请参阅

sslConfiguration()

setSslConfigurationImplementation(configuration)
Parameters:

配置QSslConfiguration

此虚拟方法用于允许覆盖setSslConfiguration()的行为。setSslConfiguration()是该方法的公共包装器。如果您覆盖此方法,请使用configuration来设置SSL配置。

setUrl(url)
Parameters:

urlQUrl

将正在处理的URL设置为url。通常,URL与发布的请求匹配,但由于各种原因,它可能不同(例如,文件路径被设置为绝对或规范路径)。

另请参阅

url() request() url()

setWellKnownHeader(name, value)
Parameters:

将标头 name 设置为值 value。如果 name 之前已设置,则会被覆盖。

socketStartedConnecting()

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

sslConfiguration()
Return type:

QSslConfiguration

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

如果发出sslErrors()信号,那么在信号发出时,对等方的证书及其证书链将是已知的。

另请参阅

setSslConfiguration()

sslConfigurationImplementation(configuration)
Parameters:

配置QSslConfiguration

此虚拟方法用于允许覆盖sslConfiguration()的行为。sslConfiguration()是该方法的公共包装器。配置将在configuration中返回。

sslErrors(errors)
Parameters:

错误 – .QSslError 列表

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

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

此信号可用于向用户显示错误消息,指示安全性可能受到威胁,并显示SSL设置(参见sslConfiguration()以获取)。如果用户在分析远程证书后决定继续,插槽应调用ignoreSslErrors()

uploadProgress(bytesSent, bytesTotal)
Parameters:
  • bytesSent – int

  • bytesTotal – int

此信号用于指示此网络请求的上传部分的进度(如果有)。如果此请求没有关联的上传,则不会发出此信号。

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

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

另请参阅

downloadProgress()

url()
Return type:

QUrl

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