跳到正文
Yayin Story Studio Yayin Story Studio 项目文档

Visindigo::Network::HttpResponse Class

class Visindigo::Network::HttpResponse

HTTP 响应描述对象. 详情...

头文件: #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

流式请求在结束前消息体也尚未收齐,应通过 HttpReply::bodyChunkReceivedHttpReply::frameReceived 增量消费。

Note: 头部键名统一以小写形式保存,getHeader() 的查找不区分大小写, 这与 HTTP 规范一致。

另请参阅 Visindigo::Network::HttpRequest and Visindigo::Network::HttpReply.

成员函数文档

[since Visindigo 0.17.0] QByteArray HttpResponse::getBody() const

返回消息体。仅在 HttpRequest::BodySink::AutoHttpRequest::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 开始支持。