一、描述
QNetworkRequest 保存通过网络发送请求所需的信息。 它包含一个 URL 和一些可用于修改请求的辅助信息。
二、类型成员
1、enum QNetworkRequest::Attribute:QNetworkRequest 和 QNetworkReply 的属性。用于控制请求的行为并将返回的信息传递给应用程序。属性也是可扩展的,允许自定义实现传递自定义值。
- HttpStatusCodeAttribute:仅回复,类型:QMetaType::Int(无默认值) 表示从 HTTP 服务器收到的 HTTP 状态代码(如 200、304、404、401 等)。
- HttpReasonPhraseAttribute:仅回复,类型:QMetaType::QByteArray(无默认值)表示从 HTTP 服务器收到的 HTTP 原因短语(如“确定”、“找到”、“未找到”、“拒绝访问”等)这是状态代码的可读表示。
- RedirectionTargetAttribute:仅回复,类型:QMetaType::QUrl(无默认值)表示服务器正在将请求重定向到不同的 URL。 默认情况下,网络访问 API 不遵循重定向:应用程序可以根据其安全策略确定是否应该允许请求的重定向,或者可以将 FollowRedirectsAttribute 设置为 true。 返回的 URL 可能是相对的。 使用 QUrl::resolved() 从中创建一个绝对 URL。
- ConnectionEncryptedAttribute:仅回复,类型:QMetaType::Bool(默认值:false)指示数据是否通过加密(安全)连接获得。
- CacheLoadControlAttribute:仅请求,类型:QMetaType::Int(默认值:QNetworkRequest::PreferNetwork) 控制应如何访问缓存。可能的值是 QNetworkRequest::CacheLoadControl 的值。(默认的 QNetworkAccessManager 实现不支持缓存。 但是,某些后端可能会使用此属性来修改其请求(例如,用于缓存代理))
- CacheSaveControlAttribute:仅请求,类型:QMetaType::Bool(默认值:true)控制是否应将获得的数据保存到缓存以备将来使用。 前提是它是可缓存的(可缓存的内容取决于所使用的协议)。
- SourceIsFromCacheAttribute:仅回复,类型:QMetaType::Bool(默认值:false)指示数据是否从缓存中获取。
- DoNotBufferUploadDataAttribute:仅请求,类型:QMetaType::Bool(默认值:false)指示是否允许 QNetworkAccessManager 代码缓冲上传数据,例如 在进行 HTTP POST 时。 将此标志与顺序上传数据一起使用时,必须设置 ContentLengthHeader 标头。
- HttpPipeliningAllowedAttribute:仅请求,类型:QMetaType::Bool(默认值:false)指示是否允许 QNetworkAccessManager 代码对此请求使用 HTTP 流水线。
- HttpPipeliningWasUsedAttribute:仅回复,类型:QMetaType::Bool 指示是否使用 HTTP 管道来接收此回复。
- CustomVerbAttribute:仅请求,类型:QMetaType::QByteArray 保存要发送的自定义 HTTP 动词的值(用于使用除 GET、POST、PUT 和 DELETE 之外的其他动词)。 这个动词是在调用 QNetworkAccessManager::sendCustomRequest() 时设置的。
- CookieLoadControlAttribute:仅请求,类型:QMetaType::Int(默认:QNetworkRequest::Automatic) 指示是否在请求中发送“Cookie”标头。
- CookieSaveControlAttribute:仅请求,类型:QMetaType::Int(默认值:QNetworkRequest::Automatic) 指示是否保存从服务器收到的响应请求的“Cookie”标头。
- AuthenticationReuseAttribute:仅请求,类型:QMetaType::Int(默认值:QNetworkRequest::Automatic)指示是否在请求中使用缓存的授权凭据(如果可用)。 如果它设置为 QNetworkRequest::Manual 并且身份验证机制是“Basic”或“Digest”,Qt 将不会发送一个“Authorization”HTTP 标头以及它可能具有的请求 URL 的任何缓存凭据。
- BackgroundRequestAttribute:类型:QMetaType::Bool(默认值:false)表示这是后台传输,而不是用户发起的传输。
- Http2AllowedAttribute:仅请求,类型:QMetaType::Bool(默认值:false)指示是否允许 QNetworkAccessManager 代码对此请求使用 HTTP/2。
- Http2WasUsedAttribute:仅回复,类型:QMetaType::Bool(默认值:false)指示是否使用 HTTP/2 接收此回复。
- EmitAllUploadProgressSignalsAttribute:仅请求,类型:QMetaType::Bool(默认值:false)指示是否应发出所有上传信号。 默认情况下,uploadProgress 信号仅以 100 毫秒的间隔发出。
- FollowRedirectsAttribute:仅请求,类型:QMetaType::Bool(默认值:false)指示网络访问 API 是否应自动跟随 HTTP 重定向响应。 目前不允许进行不安全的重定向,即从“https”重定向到“http”协议。
- OriginalContentLengthAttribute:仅回复,类型 QMetaType::Int 当数据被压缩并且请求被标记为自动解压缩时,在无效并从头中删除之前保留原始内容长度属性。
- RedirectPolicyAttribute:仅请求,类型:QMetaType::Int,应该是 QNetworkRequest::RedirectPolicy 值之一(默认值:ManualRedirectPolicy)。 此属性使 FollowRedirectsAttribute无效。
- Http2DirectAttribute:仅请求,类型:QMetaType::Bool(默认值:false)如果设置,此属性将强制 QNetworkAccessManager 使用 HTTP/2 协议,而无需初始 HTTP/2 协议协商。
- AutoDeleteReplyOnFinishAttribute:仅请求,类型:QMetaType::Bool(默认值:false)如果设置,此属性将使 QNetworkAccessManager 在发出“完成”后删除 QNetworkReply。
- User:特殊类型。附加信息可以在 QVariants 中传递,类型范围从 User 到 UserMax。该范围是为 QNetworkAccessManager 的扩展保留的。
- UserMax:见User。
2、enum QNetworkRequest::CacheLoadControl:控制 QNetworkAccessManager 的缓存机制。
- AlwaysNetwork:始终从网络加载并且不检查缓存是否具有有效条目(类似于浏览器中的“重新加载”功能); 此外,强制中间缓存重新验证。
- PreferNetwork:默认值。如果缓存条目早于网络条目,则从网络加载。永远不会从缓存中返回陈旧的数据,而是重新验证已经陈旧的资源。
- PreferCache:如果可用,从缓存加载,否则从网络加载。 请注意,这可能会从缓存中返回可能过时(但未过期)的项目。
- AlwaysCache:仅从缓存加载,如果项目未缓存则指示错误(即离线模式)。
3、enum QNetworkRequest::KnownHeaders:QNetworkRequest 解析的已知标头类型列表。 每个已知标头也以其完整的 HTTP 名称以原始形式表示。
- ContentDispositionHeader:对应于 HTTP Content-Disposition 标头并包含一个包含处置类型(例如,附件)和参数(例如,文件名)的字符串。
- ContentTypeHeader:对应于 HTTP Content-Type 标头并包含一个包含媒体 (MIME) 类型和任何辅助数据(例如,字符集)的字符串。
- ContentLengthHeader:对应于 HTTP Content-Length 标头,包含传输数据的字节长度。
- LocationHeader:对应于 HTTP Location 标头并包含一个表示数据实际位置的 URL,包括重定向时的目标 URL。
- LastModifiedHeader:对应于 HTTP Last-Modified 标头并包含一个 QDateTime 表示内容的最后修改日期。
- IfModifiedSinceHeader:对应于 HTTP If-Modified-Since 标头并包含 QDateTime。 它通常被添加到 QNetworkRequest 中。 如果资源自此时起没有改变,服务器应发送 304(未修改)响应。
- ETagHeader:对应于 HTTP ETag 标头并包含一个 QString 表示内容的最后修改状态。
- IfMatchHeader:对应于 HTTP If-Match 标头并包含一个 QStringList。 它通常被添加到 QNetworkRequest 中。 如果资源不匹配,服务器应发送 412(前提条件失败)响应。
- IfNoneMatchHeader:对应于 HTTP If-None-Match 标头并包含一个 QStringList。 它通常被添加到 QNetworkRequest 中。 如果资源匹配,服务器应发送 304(未修改)响应。
- CookieHeader:对应于 HTTP Cookie 标头并包含一个 QList<QNetworkCookie> 表示要发送回服务器的 cookie。
- SetCookieHeader:对应于 HTTP Set-Cookie 标头,并包含一个 QList 表示服务器发送的 cookie 并存储在本地。
- UserAgentHeader:HTTP 客户端发送的 User-Agent 标头。
- ServerHeader:HTTP 客户端收到的服务器标头。
4、enum QNetworkRequest::LoadControl:指示请求加载机制的某个方面是否已被手动覆盖。
- Automatic:默认值:表示默认行为。
- Manual:表示行为已被手动覆盖。
5、enum QNetworkRequest::Priority:网络请求优先级。
- HighPriority:高。
- NormalPriority:正常。
- LowPriority:低。
6、enum QNetworkRequest::RedirectPolicy:网络访问 API 是否应自动遵循 HTTP 重定向响应。
- ManualRedirectPolicy:默认值:不遵循任何重定向。
- NoLessSafeRedirectPolicy:仅允许“http”->“http”、“http”->“https”或“https”->“https”重定向。
- SameOriginRedirectPolicy:需要相同的协议、主机和端口。如http://example.com 和 http://example.com:80 将不会重定向(隐式/显式端口被视为不匹配)。
- UserVerifiedRedirectPolicy:客户端通过处理 redirected() 信号来决定是否重定向。
7、enum QNetworkRequest::TransferTimeoutConstant:一个常量,可用于启用具有预设值的传输超时。
- DefaultTransferTimeoutConstant:以毫秒为单位的传输超时。在没有参数的情况下调用 setTimeout() 时使用。
三、成员函数
1、void setHttp2Configuration(const QHttp2Configuration &configuration)
设置QNetworkAccessManager 用于此请求及其底层 HTTP/2 连接的参数。
2、QList rawHeaderList()
返回在此网络请求中设置的所有原始标头的列表。按照设置顺序排列。
3、void setAttribute(QNetworkRequest::Attribute code, const QVariant &value)
设置属性值。如果该属性已设置,则丢弃先前的值。如果 value 是无效的 QVariant,则该属性未设置。
4、void setMaximumRedirectsAllowed(int maxRedirectsAllowed)
设置此请求允许遵循的最大重定向数。
5、void setOriginatingObject(QObject *object)
设置发起当前请求的对象。
6、void setPeerVerifyName(const QString &peerName)
设置证书验证的主机名(不是用于 TCP 连接的主机名)。
7、void setPriority(QNetworkRequest::Priority priority)
设置请求的优先级。优先级只是对QNetworkAccessManager 的一个提示。它可以使用也可以不使用。用于 HTTP 来决定哪个请求应该首先发送到服务器。
8、void setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)
设置表头的值。两次设置相同的标题会覆盖之前的设置。要完成多个同名 HTTP 标头的行为,应该连接这两个值,用逗号 (",") 分隔它们并设置一个原始标头。
例:
request.setRawHeader(QByteArray("Last-Modified"), QByteArray("Sun, 06 Nov 1994 08:49:37 GMT"));
9、void setSslConfiguration(const QSslConfiguration &config)
将此网络请求的 SSL 配置设置为 config。适用的设置是私钥、本地证书、SSL 协议(SSLv2、SSLv3、TLSv1.0,如果适用)、CA 证书和 SSL 后端允许使用的密码。
10、void setTransferTimeout(int timeout = DefaultTransferTimeoutConstant)
设置传输超时时间(毫秒)。如果在超时到期之前没有传输字节,传输将被中止。零表示未设置计时器。 如果未提供参数,则超时为 QNetworkRequest::DefaultTransferTimeoutConstant。如果未调用此函数,则超时将被禁用且值为 0。
11、void setUrl(const QUrl &url)
设置此网络请求所指的 URL 为 url。