From d8a5f200c1376035456b128da80db1b115f9012f Mon Sep 17 00:00:00 2001 From: wjqserver <114663932+WJQSERVER@users.noreply.github.com> Date: Wed, 22 Apr 2026 09:17:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20Client()/HTTPC()=20=E4=BC=98=E5=85=88?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20per-request=20HTTPClient=20=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复 Gemini 审查意见:中间件设置的自定义 HTTPClient 不再被绕过。 Client() 和 HTTPC() 现在优先使用 Context.HTTPClient, 仅在未设置时回退到 Engine 默认实例。 Alina Agent生成 --- context.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/context.go b/context.go index 540e27f..f21ed48 100644 --- a/context.go +++ b/context.go @@ -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, } }