fix: Client()/HTTPC() 优先使用 per-request HTTPClient 字段

修复 Gemini 审查意见:中间件设置的自定义 HTTPClient 不再被绕过。
Client() 和 HTTPC() 现在优先使用 Context.HTTPClient,
仅在未设置时回退到 Engine 默认实例。

Alina Agent生成
This commit is contained in:
wjqserver 2026-04-22 09:17:02 +08:00
parent 6006267d25
commit d8a5f200c1

View file

@ -864,19 +864,27 @@ func (c *Context) GetErrors() []error {
return c.Errors
}
// Client 返回 Engine 提供的 HTTPClient
// 方便在请求处理函数中进行出站 HTTP请求
// Client 返回当前请求的 HTTPClient
// 如果请求处理函数或中间件设置了自定义 HTTPClient返回该实例
// 否则返回 Engine 提供的默认实例
//
// Deprecated: 使用 HTTPC() 替代,新方法会自动关联请求 Context
func (c *Context) Client() *httpc.Client {
if c.HTTPClient != nil {
return c.HTTPClient
}
return c.engine.HTTPClient
}
// HTTPC 返回自动关联请求 Context 的 HTTP 客户端
// 当请求被取消时,通过此客户端发起的出站请求也会自动取消
func (c *Context) HTTPC() *contextHTTPClient {
client := c.HTTPClient
if client == nil {
client = c.engine.HTTPClient
}
return &contextHTTPClient{
client: c.engine.HTTPClient,
client: client,
ctx: c.ctx,
}
}