- class QNetworkAccessManager#
QNetworkAccessManager
类允许应用程序发送网络请求并接收响应。更多...概要#
方法#
定义
__init__()
定义
cache()
定义
cookieJar()
定义
get()
定义
head()
定义
post()
定义
proxy()
定义
put()
定义
setCache()
定义
setProxy()
虚函数#
槽函数#
信号#
注意
本文档可能包含自动从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()
创建)另请参阅
构建一个
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)#
- 参数:
reply –
QNetworkReply
authenticator –
QAuthenticator
每当最终服务器在交付请求的内容之前请求认证时,都会发出此信号。与此信号连接的槽应填充
authenticator
对象中的凭据,以获取内容(可通过检查reply
对象来确定)。QNetworkAccessManager
将在内部缓存凭据,并如果服务器再次要求认证,则将发送相同的值,而不发出 authenticationRequired() 信号。如果它拒绝凭据,则将再次发出此信号。注意
要确保请求不发送凭据,不要在
authenticator
对象上调用 setUser() 或 setPassword()。这将导致finished()
信号以带有错误QNetworkReply
的形式发出AuthenticationRequiredError
。注意
无法使用 QueuedConnection 连接到此信号,因为如果信号返回时认证器尚未用新信息填充,连接将失败。
- autoDeleteReplies()#
- 返回类型::
bool
如果
QNetworkAccessManager
当前配置为自动删除 QNetworkReplies,则返回 true,否则返回 false。- cache()#
- 返回类型::
返回用于存储从网络获得的数据的缓存。
另请参阅
- clearAccessCache()#
刷新认证数据和网络连接的内部缓存。
此函数在进行自动测试时非常有用。
- clearConnectionCache()#
刷新网络连接的内部缓存。与
clearAccessCache()
相比,保留了认证数据。另请参阅
- connectToHost(hostName[, port=80])#
- 参数:
hostName – str
port – int
在端口
port
初始化对由hostName
指定的主机的连接。此函数在发起 HTTP 请求之前完成对服务器的 TCP 握手,从而降低网络延迟。- connectToHostEncrypted(hostName[, port=443[, sslConfiguration=QSslConfiguration.defaultConfiguration()]])#
- 参数:
hostName – str
port – int
sslConfiguration –
QSslConfiguration
使用
sslConfiguration
在端口号port
处启动到由hostName
指定的主机的连接。此函数在发起HTTPS请求之前,完成到主机的前置TCP和SSL握手,从而降低了网络延迟。注意
通过在
sslConfiguration
上调用setAllowedNextProtocols(),可以预先连接一个HTTP/2连接。在允许的协议列表中包含QSslConfiguration::ALPNProtocolHTTP2时,就可以执行这一操作。在HTTP/2的情况下,每台主机只需要一个连接,即对同一主机调用此方法多次不会导致网络事务更快。- connectToHostEncrypted(hostName, port, sslConfiguration, peerName)
- 参数:
hostName – str
port – int
sslConfiguration –
QSslConfiguration
peerName – str
这是一个重载函数。
使用
sslConfiguration
在端口号port
处启动到由hostName
指定的主机的连接,peerName
设置为用于证书验证的主机名。在发起HTTPS请求之前,此函数可以完成到主机的前置TCP和SSL握手,从而降低网络延迟。注意
通过在
sslConfiguration
上调用setAllowedNextProtocols(),可以预先连接一个HTTP/2连接。在允许的协议列表中包含QSslConfiguration::ALPNProtocolHTTP2时,就可以执行这一操作。在HTTP/2的情况下,每台主机只需要一个连接,即对同一主机调用此方法多次不会导致网络事务更快。- cookieJar()#
- 返回类型::
返回用于存储从网络获取的cookie以及即将发送的cookie的
QNetworkCookieJar
。另请参阅
- createRequest(op, request[, outgoingData=None])#
- 参数:
op –
Operation
request –
QNetworkRequest
outgoingData –
QIODevice
- 返回类型::
返回一个新
QNetworkReply
对象来处理操作op
和请求originalReq
。对于 Get 和 Head 请求,设备outgoingData
总是 0,但在那些操作中(QByteArray 的变体将传递 QBuffer 对象)将作为post()
和put()
的参数。默认实现调用在
setCookieJar()
中设置的 cookie jar 的cookiesForUrl()
来获取要发送到远程服务器的 cookie。返回的对象必须处于打开状态。
- deleteResource(request)#
- 参数:
request –
QNetworkRequest
- 返回类型::
向由
request
的 URL 标识的资源发送删除请求。- enableStrictTransportSecurityStore(enabled[, storeDir=""])#
- 参数:
enabled – bool
storeDir – str
如果
enabled
是true
,则内部 HSTS 缓存将使用持久存储来读取和写入 HSTS 政策。storeDir
定义此存储的位置。默认位置由 QStandardPaths::CacheLocation 定义。如果没有可写的 QStandartPaths::CacheLocation 并且storeDir
是空字符串,则存储位置位于程序的当前工作目录。注意
如果启用持久存储时 HSTS 缓存已存在 HSTS 政策,则将在存储中保留这些政策。如果缓存和存储都包含相同的已知主机,则缓存中的策略被认为是更新的(因此将覆盖存储中的先前值)。如果不希望这种行为,请在启用 Strict Transport Security 之前启用 HSTS 存储。默认情况下,HSTS 政策的持久存储已禁用。
- encrypted(reply)#
- 参数:
reply –
QNetworkReply
当SSL/TLS会话成功完成初始握手时,将触发此信号。此时,尚未传输用户数据。可以使用该信号执行证书链的额外检查,例如在网站证书更改时通知用户。
reply
参数指定了负责哪个网络响应。如果响应不符合预期标准,应通过连接到此信号的槽调用abort()
来终止它。可以使用sslConfiguration()
方法检查当前使用的SSL配置。内部,
QNetworkAccessManager
可能对一个服务器开启多个连接,以便并行处理请求。这些连接可以被重用,这意味着加密()信号可能不会发出。这意味着您只能保证在QNetworkAccessManager
的生命周期内接收到针对网站的第一连接的第一个此信号。另请参阅
- finished(reply)#
- 参数:
reply –
QNetworkReply
每当挂起的网络响应完成时,都会触发此信号。
reply
参数将包含刚刚完成的响应的指针。此信号与finished()
信号同时发出。有关对象将处于的状态信息,请参阅
finished()
。- get(request)#
- 参数:
request –
QNetworkRequest
- 返回类型::
向目标
request
发送请求以获取其内容,并返回一个新的用于读取的QNetworkReply
对象。每当有新数据到达时,该对象将发出readyRead()信号。内容及其关联的标题都会被下载。
- get(request)data)
- 参数:
request –
QNetworkRequest
数据 –
QIODevice
- 返回类型::
这是一个重载函数。
注意
带有消息体的GET请求不会被缓存。
注意
如果请求被重定向,只有在状态码为307或308时,消息体才会保留。
- get(request)data)
- 参数:
request –
QNetworkRequest
数据 –
QByteArray
- 返回类型::
这是一个重载函数。
注意
带有消息体的GET请求不会被缓存。
注意
如果请求被重定向,只有在状态码为307或308时,消息体才会保留。
- head(request)#
- 参数:
request –
QNetworkRequest
- 返回类型::
向目标
request
发送请求以获取网络标题,并返回一个包含这些标题的新QNetworkReply
对象。该函数以关联的HTTP请求(HEAD)命名。
- isStrictTransportSecurityEnabled()#
- 返回类型::
bool
如果启用了HTTP Strict Transport Security (HSTS),则返回true。默认情况下,HSTS是禁用的。
- isStrictTransportSecurityStoreEnabled()#
- 返回类型::
bool
如果HSTS缓存使用持久存储来加载和存储HSTS策略,则返回true。
- post(request)data)#
- 参数:
request –
QNetworkRequest
数据 –
QByteArray
- 返回类型::
这是一个重载函数。
将
data
字节数组的内容发送到由request
指定的目标。- post(request, multiPart)
- 参数:
request –
QNetworkRequest
multiPart –
QHttpMultiPart
- 返回类型::
这是一个重载函数。
将
multiPart
消息的内容发送到由request
指定的目的地。这可以用来通过 HTTP 发送 MIME 多部分消息。
另请参阅
- post(request, data)
- 参数:
request –
QNetworkRequest
数据 –
QIODevice
- 返回类型::
向由
request
指定的目的地发送 HTTP POST 请求,并返回一个打开用于读取的新的QNetworkReply
对象,该对象将包含服务器发送的回复。数据设备的内容将上传到服务器。data
必须可读取,并且必须在发出对该回复的finished()
信号之前保持有效。注意
在 HTTP 和 HTTPS 以外的协议上发送 POST 请求是未定义的,并且可能会失败。
- 参数:
reply –
QNetworkReply
authenticator –
QSslPreSharedKeyAuthenticator
如果 SSL/TLS 握手协商 PSK 密码套件,则发出此信号,因此需要进行 PSK 身份验证。响应对象是协商此类密码套件的
QNetworkReply
。在使用PSK时,客户端必须向服务器发送有效的身份信息和有效的预共享密钥,以便SSL握手得以继续。应用程序可以通过连接到该信号的槽来提供这些信息,根据需要填写传递的
认证器
对象。注意
忽略此信号或未能提供所需的凭证,会导致握手失败,因此连接将被终止。
- 代理()#
- 返回类型::
返回使用此
QNetworkAccessManager
对象发送的请求将使用的QNetworkProxy
。代理的默认值为默认代理
。- 代理身份验证需要(代理, 认证器)#
- 参数:
代理 –
QNetworkProxy
authenticator –
QAuthenticator
每当代理请求身份验证而
QNetworkAccessManager
找不到有效的缓存的凭证时,都会发出此信号。连接到此信号的槽应该填写QNetworkAccessManager
中的代理proxy
的凭证。QNetworkAccessManager
会在内部缓存凭证。下次代理请求身份验证时,QNetworkAccessManager
将自动发送相同的凭证,而无需再次发出proxyAuthenticationRequired信号。如果代理拒绝凭证,
QNetworkAccessManager
将再次发出信号。- proxyFactory()#
- 返回类型::
返回此
QNetworkAccessManager
对象用于确定用于请求的代理的代理工厂。请注意,此函数返回的指针由
QNetworkAccessManager
管理,并且可能随时被删除。另请参阅
- put(request, multiPart)#
- 参数:
request –
QNetworkRequest
multiPart –
QHttpMultiPart
- 返回类型::
这是一个重载函数。
将
multiPart
消息的内容发送到由request
指定的目的地。这可以用来通过 HTTP 发送 MIME 多部分消息。
- put(request, data)
- 参数:
request –
QNetworkRequest
数据 –
QIODevice
- 返回类型::
将
data
的内容上传到目标request
,并返回一个新的QNetworkReply
对象,该对象将打开以获取回复。data
必须在调用此函数时打开以供读取,并且必须在为此回复发出finished()
信号之前保持有效。从返回对象中是否可以读取任何内容取决于协议。对于 HTTP,服务器可能会发送一个小型 HTML 页面,指示上传成功(或未成功)。其他协议的回复可能包含内容。
注意
对于 HTTP,此请求将发送一个 PUT 请求,而大多数服务器不允许。表单上传机制,包括通过 HTML 表单上传文件,使用 POST 机制。
- put(request, data)
- 参数:
request –
QNetworkRequest
数据 –
QByteArray
- 返回类型::
这是一个重载函数。
将
data
字节数组的内容发送到由request
指定的目标。返回在创建新请求时使用的重定向策略。
- sendCustomRequest(request, verb, multiPart)#
- 参数:
request –
QNetworkRequest
verb –
QByteArray
multiPart –
QHttpMultiPart
- 返回类型::
这是一个重载函数。
向由
request
的 URL 指定的服务器发送自定义请求。将
multiPart
消息的内容发送到由request
指定的目的地。这可以用于发送适用于自定义动词的 MIME 多部分消息。
另请参阅
- sendCustomRequest(request, verb[, data=None])
- 参数:
request –
QNetworkRequest
verb –
QByteArray
数据 –
QIODevice
- 返回类型::
向由
request
的 URL 指定的服务器发送自定义请求。发送服务器有效的动词
verb
的责任在于用户。此方法提供了发送除通过
get()
或post()
等公共动词提供的动词以外的动词的手段,例如发送 HTTP OPTIONS 命令。如果
data
不为空,则data
设备的内容将上传到服务器;在这种情况下,data 必须为打开读取,且必须在为当前响应发出的finished()
信号之前保持有效。- sendCustomRequest(request, verb, data)
- 参数:
request –
QNetworkRequest
verb –
QByteArray
数据 –
QByteArray
- 返回类型::
这是一个重载函数。
将
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
,可用于此。另请参阅
- setCookieJar(cookieJar)#
- 参数:
cookieJar –
QNetworkCookieJar
将管理器的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()
。另请参阅
- setProxyFactory(factory)#
- 参数:
strong>factory -
QNetworkProxyFactory
设置此类的代理工厂为
factory
。代理工厂用于确定用于给定请求的更具体的代理列表,而不是尝试为所有请求使用相同的代理值。由
QNetworkAccessManager
发出的所有查询都将有类型UrlRequest
.例如,代理工厂可以应用以下规则
如果目标地址在本地网络中(例如,如果主机名不包含点或它是在组织的IP地址范围内的IP地址),则返回
NoProxy
如果请求是FTP,则返回FTP代理
如果请求是HTTP或HTTPS,则返回HTTP代理
否则返回SOCKSv5代理服务器
对象
factory
的生命周期将由QNetworkAccessManager
管理。当需要时,它会删除对象。- setRedirectPolicy(policy)#
- 参数:
strong>policy -
RedirectPolicy
将管理器的重定向策略设置为指定的
policy
。此策略将影响由管理器创建的所有后续请求。使用此函数在管理器级别上启用或禁用HTTP重定向。
注意
在创建请求时,QNetworkRequest::RedirectAttributePolicy具有最高优先级,其次是管理器的策略。
默认值为
NoLessSafeRedirectPolicy
。建议依赖于手动处理重定向的客户端在他们的代码中明确设置此策略。- setStrictTransportSecurityEnabled(enabled)#
- 参数:
enabled – bool
如果
enabled
为true
,QNetworkAccessManager
将遵循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)#
- 参数:
reply –
QNetworkReply
errors – .list of QSslError
如果在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
方法,而不是这个方法。另请参阅
- transferTimeout()#
- 返回类型::
int
返回用于传输的的超时时间,以毫秒为单位。
另请参阅