Files
new-api/patches/claude-passthrough.patch
huangzhenpc b25f1f8634 同步官方v0.9.0-alpha.8,保留自定义Footer和Claude穿透功能
- 更新到官方最新版本 (c826d06d)
- 保留自定义页脚品牌信息 (听泉claude提供)
- 保留Claude渠道请求穿透功能,支持PassThroughRequestEnabled设置
- 添加补丁文件便于后续维护

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-25 10:32:26 +08:00

46 lines
1.7 KiB
Diff

diff --git a/relay/channel/claude/adaptor.go b/relay/channel/claude/adaptor.go
index 540742d6..c715c0c9 100644
--- a/relay/channel/claude/adaptor.go
+++ b/relay/channel/claude/adaptor.go
@@ -55,14 +55,34 @@ func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) {
}
func (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Header, info *relaycommon.RelayInfo) error {
- channel.SetupApiRequestHeader(info, c, req)
+ if model_setting.GetGlobalSettings().PassThroughRequestEnabled {
+ // 穿透模式:直接复制原始请求头,但跳过系统级头信息
+ for key, values := range c.Request.Header {
+ keyLower := strings.ToLower(key)
+ if keyLower == "host" || keyLower == "content-length" || keyLower == "connection" {
+ continue
+ }
+ for _, value := range values {
+ req.Add(key, value)
+ }
+ }
+ } else {
+ // 非穿透模式:使用通用设置
+ channel.SetupApiRequestHeader(info, c, req)
+ }
+
+ // 无论哪种模式都需要设置正确的API密钥
req.Set("x-api-key", info.ApiKey)
- anthropicVersion := c.Request.Header.Get("anthropic-version")
- if anthropicVersion == "" {
- anthropicVersion = "2023-06-01"
+
+ if !model_setting.GetGlobalSettings().PassThroughRequestEnabled {
+ // 非穿透模式才强制设置这些头
+ anthropicVersion := c.Request.Header.Get("anthropic-version")
+ if anthropicVersion == "" {
+ anthropicVersion = "2023-06-01"
+ }
+ req.Set("anthropic-version", anthropicVersion)
+ model_setting.GetClaudeSettings().WriteHeaders(info.OriginModelName, req)
}
- req.Set("anthropic-version", anthropicVersion)
- model_setting.GetClaudeSettings().WriteHeaders(info.OriginModelName, req)
return nil
}