❶ Qt网络编程:QNetworkRequest、QNetworkReply
QNetworkRequest 描述了通过网络发送请求所需的信息,包括一个 URL 和辅助信息,这些信息可用于控制请求的行为或传递给应用程序。以下是 QNetworkRequest 的主要类型成员:
- Attribute:用于控制请求行为并传递返回信息的属性,也是可扩展的,允许自定义实现传递自定义值。
- CacheLoadControl:控制 QNetworkAccessManager 的缓存机制。
- KnownHeaders:QNetworkRequest 解析的已知标头类型列表,每个已知标头以完整的 HTTP 名称表示。
- LoadControl:指示请求加载机制的某个方面是否已被手动覆盖。
- Priority:网络请求的优先级。
- RedirectPolicy:网络访问 API 是否应自动遵循 HTTP 重定向响应。
以下是 QNetworkRequest 的成员函数:
- setHttp2Configuration(configuration):设置 QNetworkAccessManager 用于此请求及其底层 HTTP/2 连接的参数。
- rawHeaderList():返回在此网络请求中设置的所有原始标头的列表,按设置顺序排列。
- setAttribute(code, value):设置属性值,如果该属性已设置,则丢弃先前的值;如果 value 为无效 QVariant,则属性未设置。
- setMaximumRedirectsAllowed(maxRedirectsAllowed):设置此请求允许遵循的最大重定向数。
- setOriginatingObject(object):设置发起当前请求的对象。
- setPeerVerifyName(peerName):设置证书验证的主机名(非用于 TCP 连接的主机名)。
- setPriority(priority):设置请求的优先级,优先级仅作为对 QNetworkAccessManager 的提示,可使用或不使用。
- setRawHeader(headerName, headerValue):设置表头的值,两次设置相同的标题会覆盖之前的设置。对于多个同名 HTTP 标头,应将值用逗号分隔并设置为原始标头。
- setSslConfiguration(config):设置此网络请求的 SSL 配置,适用于私钥、本地证书、SSL 协议(SSLv2、SSLv3、TLSv1.0)等设置。
- setTransferTimeout(timeout):设置传输超时时间(毫秒),如果在超时到期之前没有传输字节,传输将被中止。零表示未设置计时器,调用此函数后超时值为 QNetworkRequest::。
- setUrl(url):设置此网络请求所指的 URL 为 url。
QNetworkReply 是 QNetworkAccessManager 发布请求的回复信息封装器,它继承自 QIODevice 类。以下是 QNetworkReply 的主要类型成员:
- NetworkError:指示在处理请求期间发现的所有可能的错误情况。
以下是 QNetworkReply 的成员函数:
- abort():立即中止操作并关闭所有仍打开的网络连接,将停止正在进行的上传,并发射 finished() 信号。
- downloadProgress(bytesReceived, bytesTotal):发出此信号以指示此网络请求的下载部分的进度(如果有)。如果没有关联的下载,则发出一次信号,bytesReceived 和 bytesTotal 的值都为 0。
- encrypted():发出此信号,表示 SSL/TLS 会话完成初始握手,可用于对证书链执行额外检查。
- errorOccurred(code):当出现错误时发出此信号,code 参数包含检测到的错误代码。
- finished():发出此信号,表示回复完成处理。发出此信号后,回复的数据不再更新。
- ignoreSslErrors():忽略与网络连接相关的 SSL 错误,包括证书验证错误。
- metaDataChanged():每当元数据发生更改时,都会发出此信号。
- (authenticator):发出此信号,指示 SSL/TLS 握手协商 PSK 密码套件,需要 PSK 身份验证。
- redirected(url):在请求中设置了 FollowRedirectsAttribute 并且服务器以 3xx 状态码在 location header 中返回有效 url 时,发出此信号,指示 HTTP 重定向。
- redirectAllowed():当处理 redirected() 信号的客户端代码验证了新 URL 时,发出此信号以允许重定向继续进行。
- sslErrors(errors):发出此信号,表示 SSL/TLS 会话在设置期间遇到错误,包括证书验证错误。
- uploadProgress(bytesSent, bytesTotal):发出此信号,指示此网络请求的上传部分的进度(如果有)。
- close():关闭此设备,丢弃未读数据,直到读完才释放网络资源。如果正在进行上传,它将一直持续到完成。
- hasRawHeader(headerName):如果名称 headerName 的原始标头是由远程服务器发送的,返回 true。
- ignoreSslErrors(errors):忽略列表中给出的 SSL 错误。
- isFinished():回复完成或中止时返回 true。
- isRunning():与 isFinished() 相反。
- manager():返回用于创建此 QNetworkReply 对象的 QNetworkAccessManager。
- rawHeaderList():返回远程服务器发送的标头字段列表,按发送顺序排列。
- request():返回为此回复发布的请求,请求的 URL 可能与回复的 URL 不同。
- rawHeader(headerName):返回远程服务器发送的标头 headerName 的原始内容,如果未发送标头,则返回空字节数组。
- header(header):如果该标头是由远程服务器发送的,返回已知标头标头的值;如果未发送标头,则返回无效的 QVariant。
- sslConfiguration():返回与此回复关联的 SSL 配置和状态。
- url():返回下载或上传的内容的 URL,该 URL 可能与原始请求的 URL 不同。如果设置了 QNetworkRequest::FollowRedirectsAttribute,则返回正在访问的当前 URL。
- readBufferSize():返回读取缓冲区的大小,以字节为单位,值为 0 表示读写缓冲区大小不受限制。