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