Visindigo::Network::HttpResponse Class
class Visindigo::Network::HttpResponseHTTP 响应描述对象. 详情...
| 头文件: | #include <Network/HttpRequest.h> |
| 自以下版本: | Visindigo 0.17.0 |
公开成员函数
(自 Visindigo 0.17.0 引入) QByteArray | getBody() const |
(自 Visindigo 0.17.0 引入) QString | getBodyText() const |
(自 Visindigo 0.17.0 引入) QString | getDownloadFilePath() const |
(自 Visindigo 0.17.0 引入) Visindigo::Network::HttpError | getError() const |
(自 Visindigo 0.17.0 引入) QUrl | getFinalUrl() const |
(自 Visindigo 0.17.0 引入) QString | getHeader(const QString &key) const |
(自 Visindigo 0.17.0 引入) QMap<QString, QString> | getHeaders() const |
(自 Visindigo 0.17.0 引入) Visindigo::Utility::JsonConfig | getJson() const |
(自 Visindigo 0.17.0 引入) QString | getJsonParseError() const |
(自 Visindigo 0.17.0 引入) QString | getReasonPhrase() const |
(自 Visindigo 0.17.0 引入) qint64 | getReceivedBytes() const |
(自 Visindigo 0.17.0 引入) QList<QUrl> | getRedirectChain() const |
(自 Visindigo 0.17.0 引入) qint32 | getStatusCode() const |
(自 Visindigo 0.17.0 引入) QString | getSuggestedFileName() const |
(自 Visindigo 0.17.0 引入) Visindigo::Network::HttpTimings | getTimings() const |
(自 Visindigo 0.17.0 引入) qint64 | getTotalBytes() const |
(自 Visindigo 0.17.0 引入) QString | getTraceId() const |
(自 Visindigo 0.17.0 引入) bool | isAttachment() const |
(自 Visindigo 0.17.0 引入) bool | isSuccess() const |
(自 Visindigo 0.17.0 引入) bool | isValid() const |
详细说明
HttpResponse 是值类型,可以自由拷贝与传递。它同时承担两个角色:在请求 进行中作为"已到达的元数据"载体(由 HttpReply::headersReceived 交付), 在请求结束后作为"最终结果"载体(由 HttpReply::finished 交付)。
消息体在何时可用,取决于请求设置的 HttpRequest::BodySink:
- HttpRequest::BodySink::Auto、HttpRequest::BodySink::Buffer: 请求结束后可通过 getBody() 取得。
- HttpRequest::BodySink::ToFile:getBody() 始终为空,消息体的载体是文件, 路径由 getDownloadFilePath() 给出。
流式请求在结束前消息体也尚未收齐,应通过 HttpReply::bodyChunkReceived 或 HttpReply::frameReceived 增量消费。
Note: 头部键名统一以小写形式保存,getHeader() 的查找不区分大小写, 这与 HTTP 规范一致。
另请参阅 Visindigo::Network::HttpRequest and Visindigo::Network::HttpReply.
成员函数文档
[since Visindigo 0.17.0] QByteArray HttpResponse::getBody() const
返回消息体。仅在 HttpRequest::BodySink::Auto 与 HttpRequest::BodySink::Buffer 两种方式下有内容,其余情况返回空字节数组。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] QString HttpResponse::getBodyText() const
把消息体按 UTF-8 解码为字符串。
Note: 本函数不解析 Content-Type 中的字符集参数。若服务端返回的是 GBK 等 非 UTF-8 编码,需要调用方自行取出 getBody() 并转码。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] QString HttpResponse::getDownloadFilePath() const
返回下载文件的实际落盘路径。仅在 HttpRequest::BodySink::ToFile 且 请求成功时有值。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] Visindigo::Network::HttpError HttpResponse::getError() const
返回本次请求的错误信息。请求成功时其 HttpError::isError() 为 false。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] QUrl HttpResponse::getFinalUrl() const
返回最终响应所在的地址。未跟随重定向时,它与请求地址相同; 跟随过重定向时,它是最后一跳的地址。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] QString HttpResponse::getHeader(const QString &key) const
按名称取响应头,不区分大小写。不存在时返回空字符串。
Note: HTTP 允许同名头出现多次。本函数只返回其中之一,若确实需要拿到全部 同名值,请使用 getHeaders() 并自行处理合并规则。
key 头名,不区分大小写。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] QMap<QString, QString> HttpResponse::getHeaders() const
返回全部响应头。键名已统一为小写。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] Visindigo::Utility::JsonConfig HttpResponse::getJson() const
把消息体解析为 JSON 对象。解析结果会被缓存,重复调用不会重复解析。
解析失败时返回空对象,具体原因可通过 getJsonParseError() 获取。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] QString HttpResponse::getJsonParseError() const
返回 JSON 解析失败的原因,解析成功时为空字符串。 若尚未调用过 getJson(),本函数会先触发一次解析。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] QString HttpResponse::getReasonPhrase() const
返回状态行中的原因短语,例如 "Not Found"。该字段完全由服务端提供, 可能为空,也不应与状态码共同作为判断依据。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] qint64 HttpResponse::getReceivedBytes() const
返回已接收的消息体字节数。结合 getTotalBytes() 可以计算下载进度。 做个简单的除法即可得到百分比。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] QList<QUrl> HttpResponse::getRedirectChain() const
返回重定向过程中依次经过的地址,按发生顺序排列,不含最终地址。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] qint32 HttpResponse::getStatusCode() const
返回 HTTP 状态码,例如 200、404。响应头尚未到达时返回 0。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] QString HttpResponse::getSuggestedFileName() const
从 Content-Disposition 响应头中提取服务端建议的保存文件名。
解析规则遵循 RFC 6266:优先采用 filename* 参数(RFC 5987 编码, 会被百分号解码并支持 UTF-8 文件名),缺失时退回 filename 参数。 这是因为 filename 参数在历史上只能表达 Latin-1,中文名会变成乱码, 所以服务端同时给出两者时必须以 filename* 为准。
为安全起见,返回值只包含文件名本身,任何目录成分都已被剥除。这样即便 服务端返回 "../../x",调用方直接用它拼接保存路径也不会写到目标目录之外。
Note: 本函数与实际落盘路径无关——落盘路径由请求侧的 setDownloadFilePath() 指定。它只服务于"另存为对话框的默认文件名"这类需求。 未提供可用文件名时返回空字符串,此时调用方可考虑回退为 Visindigo::Network::HttpResponse::getFinalUrl() 的最后一段路径。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] Visindigo::Network::HttpTimings HttpResponse::getTimings() const
返回耗时统计。由于 Qt 的公开接口只暴露总耗时与首字节时刻,其余细分字段 在没有替换传输后端之前恒为 -1。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] qint64 HttpResponse::getTotalBytes() const
返回消息体总长度,来自 Content-Length。无法确定时返回 -1, 这在使用分块传输编码或流式响应时是常见情况,此时只能用已接收字节数 展示"已下载多少",无法计算百分比。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] QString HttpResponse::getTraceId() const
返回本次请求的追踪标识,由请求中心分配。它在整个请求生命周期内不变, 即便发生了重定向或重试也保持同一个值,因此可以用它把散布在多条日志中的 记录串成一次完整的请求过程。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] bool HttpResponse::isAttachment() const
判断 Content-Disposition 是否声明的 disposition 类型为 attachment, 即服务端明确把响应当作"下载"而非"就地展示"。该头缺失时返回 false。
return 该头声明的类型为 attachment 时返回 true。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] bool HttpResponse::isSuccess() const
判断状态码是否在 2xx 区间,即请求是否被服务端正常受理。
return 状态码在 2xx 区间时返回 true。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] bool HttpResponse::isValid() const
判断本对象是否已经承载了有效的响应,即响应头是否已经到达。
它表示的是"是否收到响应头",而不是"请求是否已经完成"。因此 HttpReply::headersReceived 交付的对象其 isValid() 为 true , 此时消息体可能还没有任何数据。若想知道请求整体是否结束,应查看 Visindigo::Network::HttpReply::getState()。
return 响应头已经到达时返回 true。
这个function 从 Visindigo 0.17.0 开始支持。