import {
"q2316367743/moonhttp/client",
}| 入口 | 说明 |
|---|---|
| request(config, signal?) | 发送请求并读全响应体;两段拦截器都跑,失败按来源分流到两条错误链 |
| stream(config, signal?) | 不读响应体,交还原始字节流(下载);只过请求拦截器 |
| sse(config, signal?) | 按事件读的 SSE 流,要求响应头声明 text/event-stream;只过请求拦截器 |
| get / post / put / delete / patch / head / options | 七个动词快捷方法:补 url 与动词后转调 request |
| create(config) | 派生新实例:叠加默认值,继承拦截器与 cookie 罐 |
| new(config?, transport?, interceptors?, cookie_jar?) | 完整构造:可注入传输层 / 拦截器 / cookie 罐 |
///|
let api = @moonhttp.Client::new(
interceptors=@moonhttp.Interceptors::new()
.use_request(config => config.with_header("X-Token", token))
.use_response(resp => resp.with_status(200)),
)pub struct Client {
// private fields
}async fn Client::stream(self : Client, config : Config, signal? : AbortSignal) -> StreamResponse raise HttpErrorpub struct Interceptors {
// private fields
}let client = @moonhttp.Client::new(
interceptors=@moonhttp.Interceptors::new()
.use_request(config => config.with_header("X-Token", token), name="auth")
.use_response(response => response.with_text(unwrap(response.text()))),
)
// 共享一份基础链,按客户端裁剪:不必把链再抄一遍,基础链演进时也不会漂
let base = @moonhttp.Interceptors::new()
.use_request(config => config.with_header("X-Token", token), name="auth")
.use_response(rewrite_json, name="rewrite")
let trimmed = base.remove_response("rewrite").unwrap()fn Interceptors::use_request(self : Interceptors, on_request : async (Config) -> Config raise HttpError, on_rejected? : async (HttpError) -> Response raise HttpError, name? : StringView) -> Interceptorsfn Interceptors::use_response(self : Interceptors, on_fulfilled : async (Response) -> Response raise HttpError, on_rejected? : async (HttpError) -> Response raise HttpError, name? : StringView) -> InterceptorsInstall
Download zipaxios 风格的 MoonBit HTTP 客户端:实例与配置合并、四种请求体形态、流式与 SSE、自动重定向