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

Visindigo::Network::HttpError Struct

struct Visindigo::Network::HttpError

网络层统一错误信息. 详情...

头文件: #include <Network/HttpTypes.h>
自以下版本: Visindigo 0.17.0

公开类型

(自 Visindigo 0.17.0 引入) enum class ErrorType { NoError, Aborted, Timeout, IdleTimeout, ConnectionRefused, …, Unknown }

公开成员函数

(自 Visindigo 0.17.0 引入) bool isError() const
(自 Visindigo 0.17.0 引入) QString toString() const

静态公开成员

(自 Visindigo 0.17.0 引入) QString errorTypeName(Visindigo::Network::HttpError::ErrorType type)

详细说明

网络失败属于可预期结果,而非异常情况,因此 Visindigo 的网络模块不使用 异常表达错误,而是在结果类型(std::expected)或信号中传递本结构。

这样做的另一个好处是:错误信息可以跨线程、跨信号槽安全传递,且不会被 栈展开意外绕过——异常在 Qt 的信号槽中传播本身就是不推荐的用法。

  • Type 错误分类,取值见 HttpError::ErrorType
  • HttpStatus 有 HTTP 响应时为状态码,否则为 0。
  • Message 面向用户的简短错误描述。
  • Detail 服务端返回的原始错误体(已按上限截断),常用于展示 4xx/5xx 的具体原因。
  • Retryable 该错误是否可按重试策略重试。
  • SuggestedRetryDelayMs 服务端建议的等待毫秒数,来自 Retry-After;无建议时为 -1。

成员类型文档

[since Visindigo 0.17.0] enum class HttpError::ErrorType

错误分类。命名参照 Visindigo::General::CommandErrorData::ErrorType, 以避免与下方同名的成员变量 Type 发生名称冲突。

ConstantValueDescription
Visindigo::Network::HttpError::ErrorType::NoError0无错误。
Visindigo::Network::HttpError::ErrorType::Aborted1调用方主动中止。
Visindigo::Network::HttpError::ErrorType::Timeout2连接或总时长超时。
Visindigo::Network::HttpError::ErrorType::IdleTimeout3流式请求中两次数据到达的间隔超过空闲超时。
Visindigo::Network::HttpError::ErrorType::ConnectionRefused4连接被拒绝。
Visindigo::Network::HttpError::ErrorType::HostNotFound5域名解析失败。
Visindigo::Network::HttpError::ErrorType::NetworkUnreachable6网络不可达(常见于断网或路由问题)。
Visindigo::Network::HttpError::ErrorType::ProxyError7代理相关错误。
Visindigo::Network::HttpError::ErrorType::TlsError8TLS 握手失败。
Visindigo::Network::HttpError::ErrorType::CertificateError9证书校验失败。此类错误不应被静默忽略,否则等同于放弃中间人防护。
Visindigo::Network::HttpError::ErrorType::TooManyRedirects10重定向次数超过 setFollowRedirectsMax() 设定的上限。
Visindigo::Network::HttpError::ErrorType::ProtocolError11HTTP 协议层面的错误(响应格式非法等)。
Visindigo::Network::HttpError::ErrorType::HttpStatusError12服务端返回 4xx 或 5xx。
Visindigo::Network::HttpError::ErrorType::ResponseTooLarge13响应体超过 setMaxResponseBytes() 或 setMaxBufferBytes() 设定的上限。
Visindigo::Network::HttpError::ErrorType::LocalIoError14本地 I/O 失败,例如落盘目录无法创建、目标文件无法写入。
Visindigo::Network::HttpError::ErrorType::ParseError15流式分帧或 JSON 解析失败。
Visindigo::Network::HttpError::ErrorType::QueueRejected16请求被队列拒绝,通常是命中了并发上限或队列长度上限。
Visindigo::Network::HttpError::ErrorType::UrlSchemeRejected17URL 协议不在中心允许的白名单内。
Visindigo::Network::HttpError::ErrorType::Unknown18未归类的错误。

这个enum 从 Visindigo 0.17.0 开始支持。

成员函数文档

[static, since Visindigo 0.17.0] QString HttpError::errorTypeName(Visindigo::Network::HttpError::ErrorType type)

返回枚举值对应的名字字符串;传入未收录的取值时返回 "Unknown"。

实现走 QMetaEnum 反射而不是手写 switch,这是本结构声明为 Q_GADGET 的直接 收益:枚举名只有一个来源(即声明本身),将来往 ErrorType 里增加取值时 不必记得同步修改映射表,也就不存在"新增了错误类型但日志里显示 Unknown" 这类遗漏。同时它对调用方是公开的,日志与界面可以直接拿它做展示。

type 错误类型取值。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] bool HttpError::isError() const

判断本结构是否真的表示一个错误,即 Type 不等于 ErrorType::NoError

return 不是 NoError 时返回 true。

这个function 从 Visindigo 0.17.0 开始支持。

[since Visindigo 0.17.0] QString HttpError::toString() const

生成适合写入日志的单行描述,形如:

[Timeout] Connection timed out (HTTP 504)

仅在 HttpStatus 不为 0 时附加状态码部分。若 Detail 非空, 调用方可自行决定是否展示,本函数不将其包含在内,以免日志被超长文本淹没。

这个function 从 Visindigo 0.17.0 开始支持。