PySide6.QtNetwork.QNetworkReply¶
- class QNetworkReply¶
QNetworkReply类包含了使用QNetworkAccessManager发送请求的数据和头信息。更多…概要¶
方法¶
def
__init__()def
attribute()def
error()def
hasRawHeader()def
header()def
headers()def
isFinished()def
isRunning()def
manager()def
operation()def
rawHeader()def
rawHeaderList()def
rawHeaderPairs()def
readBufferSize()def
request()def
setAttribute()def
setError()def
setFinished()def
setHeader()def
setHeaders()def
setOperation()def
setRawHeader()def
setRequest()def
setUrl()def
url()
虚拟方法¶
信号¶
def
encrypted()def
errorOccurred()def
finished()def
redirected()def
requestSent()def
sslErrors()def
uploadProgress()
注意
本文档可能包含从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
检测到与服务器响应相关的未知错误
另请参阅
创建一个带有父对象
parent的QNetworkReply对象。你不能直接实例化
QNetworkReply对象。使用QNetworkAccessManager函数来实现这一点。- abstract abort()¶
立即中止操作并关闭所有仍然打开的网络连接。仍在进行的上传也会被中止。
finished()信号也将被发出。另请参阅
close()finished()返回与代码
code关联的属性。如果属性尚未设置,则返回一个无效的QVariant(类型为QMetaType::UnknownType)。你可以期望
Attribute中列出的默认值将应用于此函数返回的值。另请参阅
- downloadProgress(bytesReceived, bytesTotal)¶
- Parameters:
bytesReceived – int
bytesTotal – int
此信号用于指示此网络请求的下载部分的进度(如果有)。如果此请求没有关联的下载,此信号将发出一次,
bytesReceived和bytesTotal的值均为 0。bytesReceived参数表示接收到的字节数,而bytesTotal表示预期下载的总字节数。如果要下载的字节数未知,bytesTotal将为 -1。当
bytesReceived等于bytesTotal时,下载完成。此时,bytesTotal将不会为-1。请注意,
bytesReceived和bytesTotal的值可能与 size()、通过 read() 或 readAll() 获取的总字节数或 header(ContentLengthHeader) 的值不同。原因是下载过程中可能存在协议开销或数据可能被压缩。- encrypted()¶
当SSL/TLS会话成功完成初始握手时,会发出此信号。此时,尚未传输任何用户数据。该信号可用于对证书链执行额外的检查,例如在网站证书更改时通知用户。如果回复不符合预期标准,则应通过连接到该信号的插槽调用
abort()来中止。可以使用sslConfiguration()方法检查正在使用的SSL配置。在内部,
QNetworkAccessManager可能会打开到服务器的多个连接,以便允许它并行处理请求。这些连接可能会被重用,这意味着不会发出 encrypted() 信号。这意味着你只能保证在QNetworkAccessManager的生命周期内,第一次连接到站点时接收到此信号。另请参阅
- error()¶
- Return type:
返回在处理此请求期间发现的错误。如果未发现错误,则返回
NoError。另请参阅
- errorOccurred(code)¶
- Parameters:
代码 –
NetworkError
当回复检测到处理中的错误时,会发出此信号。
finished()信号可能会随后发出,表示连接已结束。code参数包含检测到的错误代码。调用 errorString() 以获取错误条件的文本表示。- finished()¶
当回复处理完成时,会发出此信号。在此信号发出后,回复的数据或元数据将不再更新。
除非调用了
close()或abort(),否则回复仍然可以读取,因此可以通过调用read()或readAll()来检索数据。特别是,如果没有因为readyRead()而调用read(),那么调用readAll()将检索QByteArray中的全部内容。此信号与
finished()一起发出,其中该信号的回复参数是此对象。注意
不要删除与此信号连接的槽中的对象。使用deleteLater()。
你也可以使用
isFinished()来检查QNetworkReply是否已经完成,即使在你收到finished()信号之前。- hasRawHeader(headerName)¶
- Parameters:
headerName – str
- Return type:
布尔
如果远程服务器发送了名为
headerName的原始头部,则返回true- header(header)¶
- Parameters:
头部 –
KnownHeaders- Return type:
对象
返回已知标头
header的值,如果该标头由远程服务器发送。如果未发送该标头,则返回无效的 QVariant。- headers()¶
- Return type:
返回由远程服务器发送的头部信息。
- 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包含用户希望忽略的错误。另请参阅
- isFinished()¶
- Return type:
布尔
当回复完成或被中止时返回
true。另请参阅
- isRunning()¶
- Return type:
布尔
当请求仍在处理且回复尚未完成或已被中止时,返回
true。另请参阅
- manager()¶
- Return type:
返回用于创建此
QNetworkReply对象的QNetworkAccessManager。最初,它也是父对象。- metaDataChanged()¶
每当此回复中的元数据发生变化时,都会发出此信号。元数据是任何不是内容(数据)本身的信息,包括网络头信息。在大多数情况下,当接收到数据的第一个字节时,元数据将完全已知。然而,在处理数据期间,可能会接收到头信息或其他元数据的更新。
返回为此回复发布的操作。
另请参阅
- Parameters:
如果SSL/TLS握手协商了一个PSK密码套件,则会发出此信号,因此需要PSK认证。
使用PSK时,客户端必须向服务器发送有效的身份和有效的预共享密钥,以便SSL握手继续进行。应用程序可以通过根据其需求填充传递的
authenticator对象,在连接到该信号的槽中提供此信息。注意
忽略此信号,或未能提供所需的凭据,将导致握手失败,从而导致连接中止。
- rawHeader(headerName)¶
- Parameters:
headerName – str
- Return type:
返回远程服务器发送的头部
headerName的原始内容。如果没有这样的头部,则返回一个空的字节数组,这可能与空的头部无法区分。使用hasRawHeader()来验证服务器是否发送了这样的头部字段。- rawHeaderList()¶
- Return type:
.list of QByteArray
返回远程服务器发送的头部字段列表,按照它们被发送的顺序排列。重复的头部字段会被合并,并取代后者的重复项。
- rawHeaderPairs()¶
- Return type:
std.pairQByteArray的列表,QByteArray
返回原始头对的列表。
- readBufferSize()¶
- Return type:
整数
返回读取缓冲区的大小,以字节为单位。
另请参阅
- redirectAllowed()¶
当客户端代码处理
redirected()信号并验证了新URL后,它会发出此信号以允许重定向继续进行。此协议适用于重定向策略设置为UserVerifiedRedirectPolicy的网络请求。如果请求中未设置
ManualRedirectPolicy,并且服务器响应了3xx状态(特别是301、302、303、305、307或308状态码),并在位置头中提供了有效的URL,表示HTTP重定向,则会发出此信号。url参数包含服务器在位置头中返回的新重定向URL。另请参阅
- request()¶
- Return type:
返回为此回复发布的请求。特别要注意的是,请求的URL可能与回复的URL不同。
另请参阅
- requestSent()¶
当请求发送时,此信号会发出1次或多次。对于自定义进度或超时处理非常有用。
将属性
code设置为值value。如果code之前已设置,它将被覆盖。如果value是无效的QVariant,该属性将被取消设置。- setError(errorCode, errorString)¶
- Parameters:
errorCode –
NetworkErrorerrorString – str
将错误条件设置为
errorCode。可读的消息通过errorString设置。调用 setError() 不会发出
errorOccurred(NetworkError) 信号。另请参阅
- setFinished(finished)¶
- Parameters:
已完成 – bool
将回复设置为
finished。设置此内容后,回复数据不得更改。
另请参阅
- setHeader(header, value)¶
- Parameters:
header –
KnownHeadersvalue – 对象
将已知的头部
header设置为值value。相应的头部原始形式也将被设置。- setHeaders(newHeaders)¶
- Parameters:
newHeaders –
QHttpHeaders
将
newHeaders设置为此次网络回复的头部信息,覆盖之前设置的任何头部信息。如果某些标头与已知标头对应,它们将被解析,并且相应的解析形式也将被设置。
另请参阅
将此对象的关联操作设置为
operation。此值将由operation()返回。- setRawHeader(headerName, value)¶
- Parameters:
headerName –
QByteArrayvalue –
QByteArray
将原始头
headerName设置为值value。如果headerName之前已设置,则会被覆盖。多个相同名称的 HTTP 头在功能上等同于一个单一的头,其值由逗号分隔连接。如果
headerName匹配到一个已知的头部,值value将被解析,并且相应的解析形式也将被设置。- setReadBufferSize(size)¶
- Parameters:
size – int
将读取缓冲区的大小设置为
size字节。读取缓冲区是在使用QIODevice::read()读取之前,用于保存从网络下载的数据的缓冲区。将缓冲区大小设置为0将使缓冲区的大小不受限制。QNetworkReply将尝试在缓冲区满时停止从网络读取数据(即,bytesAvailable() 返回size或更多),从而导致下载速度也会减慢。如果缓冲区大小不受限制,QNetworkReply将尝试尽可能快地从网络下载数据。与
setReadBufferSize()不同,QNetworkReply无法保证读取缓冲区大小的精确性。也就是说,bytesAvailable()可能会返回比size更多的字节。另请参阅
- setRequest(request)¶
- Parameters:
请求 –
QNetworkRequest
将此对象的相关请求设置为
request。此值将由request()返回。- setSslConfiguration(configuration)¶
- Parameters:
配置 –
QSslConfiguration
如果可能,将与此请求关联的网络连接的SSL配置设置为
config的配置。另请参阅
- setSslConfigurationImplementation(configuration)¶
- Parameters:
配置 –
QSslConfiguration
此虚拟方法用于允许覆盖
setSslConfiguration()的行为。setSslConfiguration()是该方法的公共包装器。如果您覆盖此方法,请使用configuration来设置SSL配置。将正在处理的URL设置为
url。通常,URL与发布的请求匹配,但由于各种原因,它可能不同(例如,文件路径被设置为绝对或规范路径)。- setWellKnownHeader(name, value)¶
- Parameters:
name –
WellKnownHeadervalue –
QByteArrayView
将标头
name设置为值value。如果name之前已设置,则会被覆盖。- socketStartedConnecting()¶
当套接字正在连接时,在发送请求之前,此信号会发出0次或多次。对于自定义进度或超时处理非常有用。
- sslConfiguration()¶
- Return type:
如果使用了SSL,则返回与此回复关联的SSL配置和状态。它将包含远程服务器的证书、其通向证书颁发机构的证书链以及正在使用的加密密码。
如果发出
sslErrors()信号,那么在信号发出时,对等方的证书及其证书链将是已知的。- 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。另请参阅
返回下载或上传内容的URL。请注意,该URL可能与原始请求的URL不同。如果在请求中启用了重定向,则此函数返回网络API当前正在访问的URL,即请求重定向到的资源的URL。