fix: 去掉 runtime.GOOS/GOARCH — 服务器是 Linux,真实用户在桌面
Antigravity: - UA: 固定 darwin/arm64(不用 runtime),匹配真实 macOS 桌面用户 - x-goog-api-client: 硬编码 go1.27(不用 runtime.Version()) - 环境变量 ANTIGRAVITY_PLATFORM_OS/ARCH 可覆盖 Gemini CLI: - UA: 固定 darwin/arm64(Node.js process.platform/arch 格式) - 注意: Node.js 用 x64 不是 amd64,arm64 两者一致 - 环境变量 GEMINI_CLI_PLATFORM_OS/ARCH 可覆盖 删除 runtime 包依赖,所有平台标识改为可配置的硬编码默认值。
This commit is contained in:
parent
088a508e60
commit
e4697aa421
@ -12,7 +12,6 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"runtime"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -32,9 +31,9 @@ func (e *ForbiddenError) Error() string {
|
|||||||
|
|
||||||
// GetGoogAPIClient 返回 x-goog-api-client 头的值(导出供心跳等外部使用)
|
// GetGoogAPIClient 返回 x-goog-api-client 头的值(导出供心跳等外部使用)
|
||||||
// 格式与真实 Antigravity 的 Go SDK 一致: gl-go/{goVersion} gax-go/v2 grpc-go/1.81.0-dev
|
// 格式与真实 Antigravity 的 Go SDK 一致: gl-go/{goVersion} gax-go/v2 grpc-go/1.81.0-dev
|
||||||
|
// 注意: 不使用 runtime.Version() — 服务器编译的 Go 版本 ≠ 真实 Antigravity 的 Go 版本
|
||||||
func GetGoogAPIClient() string {
|
func GetGoogAPIClient() string {
|
||||||
goVer := runtime.Version() // e.g. "go1.22.0"
|
return "gl-go/go1.27 gax-go/v2 grpc-go/1.81.0-dev"
|
||||||
return fmt.Sprintf("gl-go/%s gax-go/v2 grpc-go/1.81.0-dev", goVer)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// setAntigravityHeaders 设置与真实 Antigravity IDE 一致的 HTTP 请求头
|
// setAntigravityHeaders 设置与真实 Antigravity IDE 一致的 HTTP 请求头
|
||||||
|
|||||||
@ -9,7 +9,6 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
@ -56,6 +55,14 @@ const (
|
|||||||
// defaultUserAgentVersion 可通过环境变量 ANTIGRAVITY_USER_AGENT_VERSION 配置,默认 0.2.0(匹配真实 extension 版本)
|
// defaultUserAgentVersion 可通过环境变量 ANTIGRAVITY_USER_AGENT_VERSION 配置,默认 0.2.0(匹配真实 extension 版本)
|
||||||
var defaultUserAgentVersion = "0.2.0"
|
var defaultUserAgentVersion = "0.2.0"
|
||||||
|
|
||||||
|
// defaultPlatformOS 和 defaultPlatformArch 模拟真实客户端的操作系统和架构
|
||||||
|
// 真实 Antigravity IDE 运行在用户桌面(macOS/Windows),不是 Linux 服务器
|
||||||
|
// 可通过环境变量 ANTIGRAVITY_PLATFORM_OS / ANTIGRAVITY_PLATFORM_ARCH 覆盖
|
||||||
|
var (
|
||||||
|
defaultPlatformOS = "darwin"
|
||||||
|
defaultPlatformArch = "arm64"
|
||||||
|
)
|
||||||
|
|
||||||
// defaultClientSecret 可通过环境变量 ANTIGRAVITY_OAUTH_CLIENT_SECRET 配置
|
// defaultClientSecret 可通过环境变量 ANTIGRAVITY_OAUTH_CLIENT_SECRET 配置
|
||||||
var defaultClientSecret = "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"
|
var defaultClientSecret = "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"
|
||||||
|
|
||||||
@ -68,13 +75,19 @@ func init() {
|
|||||||
if secret := os.Getenv(AntigravityOAuthClientSecretEnv); secret != "" {
|
if secret := os.Getenv(AntigravityOAuthClientSecretEnv); secret != "" {
|
||||||
defaultClientSecret = secret
|
defaultClientSecret = secret
|
||||||
}
|
}
|
||||||
|
// 从环境变量读取模拟平台(真实 Antigravity 运行在桌面 OS,不是 Linux 服务器)
|
||||||
|
if p := os.Getenv("ANTIGRAVITY_PLATFORM_OS"); p != "" {
|
||||||
|
defaultPlatformOS = p
|
||||||
|
}
|
||||||
|
if a := os.Getenv("ANTIGRAVITY_PLATFORM_ARCH"); a != "" {
|
||||||
|
defaultPlatformArch = a
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetUserAgent 返回当前配置的 User-Agent(匹配真实 Antigravity 格式: antigravity/{version} {os}/{arch})
|
// GetUserAgent 返回当前配置的 User-Agent(匹配真实 Antigravity 格式: antigravity/{version} {os}/{arch})
|
||||||
|
// 注意: 不使用 runtime.GOOS/GOARCH — 服务器是 Linux,但真实用户在 macOS/Windows 桌面
|
||||||
func GetUserAgent() string {
|
func GetUserAgent() string {
|
||||||
osName := runtime.GOOS // darwin, linux, windows
|
return fmt.Sprintf("antigravity/%s %s/%s", defaultUserAgentVersion, defaultPlatformOS, defaultPlatformArch)
|
||||||
arch := runtime.GOARCH // arm64, amd64
|
|
||||||
return fmt.Sprintf("antigravity/%s %s/%s", defaultUserAgentVersion, osName, arch)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getClientSecret() (string, error) {
|
func getClientSecret() (string, error) {
|
||||||
|
|||||||
@ -4,7 +4,6 @@ package geminicli
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -62,27 +61,48 @@ const (
|
|||||||
// GoogleAuthLibraryUA 模拟 google-auth-library 的 User-Agent
|
// GoogleAuthLibraryUA 模拟 google-auth-library 的 User-Agent
|
||||||
// 真实 Gemini CLI token exchange 由 google-auth-library 发起
|
// 真实 Gemini CLI token exchange 由 google-auth-library 发起
|
||||||
GoogleAuthLibraryUA = "google-api-nodejs-client"
|
GoogleAuthLibraryUA = "google-api-nodejs-client"
|
||||||
|
|
||||||
|
// FakePlatformOS 和 FakePlatformArch 模拟真实客户端的操作系统和架构
|
||||||
|
// 真实 Gemini CLI 运行在用户桌面,不是 Linux 服务器
|
||||||
|
// Node.js process.platform: darwin, linux, win32
|
||||||
|
// Node.js process.arch: arm64, x64 (注意: Node.js 用 x64,不是 amd64)
|
||||||
|
FakePlatformOS = "darwin"
|
||||||
|
FakePlatformArch = "arm64"
|
||||||
)
|
)
|
||||||
|
|
||||||
// defaultGeminiCLIVersion 可通过环境变量 GEMINI_CLI_VERSION 覆盖
|
// defaultGeminiCLIVersion 可通过环境变量 GEMINI_CLI_VERSION 覆盖
|
||||||
var defaultGeminiCLIVersion = "0.33.1"
|
var defaultGeminiCLIVersion = "0.33.1"
|
||||||
|
|
||||||
|
// defaultFakePlatformOS/Arch 可通过环境变量覆盖
|
||||||
|
var (
|
||||||
|
defaultFakePlatformOS = FakePlatformOS
|
||||||
|
defaultFakePlatformArch = FakePlatformArch
|
||||||
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
if v := os.Getenv("GEMINI_CLI_VERSION"); v != "" {
|
if v := os.Getenv("GEMINI_CLI_VERSION"); v != "" {
|
||||||
defaultGeminiCLIVersion = v
|
defaultGeminiCLIVersion = v
|
||||||
}
|
}
|
||||||
|
if p := os.Getenv("GEMINI_CLI_PLATFORM_OS"); p != "" {
|
||||||
|
defaultFakePlatformOS = p
|
||||||
|
}
|
||||||
|
if a := os.Getenv("GEMINI_CLI_PLATFORM_ARCH"); a != "" {
|
||||||
|
defaultFakePlatformArch = a
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetGeminiCLIUserAgent 返回匹配真实 Gemini CLI 格式的 User-Agent
|
// GetGeminiCLIUserAgent 返回匹配真实 Gemini CLI 格式的 User-Agent
|
||||||
// 真实格式: GeminiCLI/{version}/{model} ({platform}; {arch})
|
// 真实格式: GeminiCLI/{version}/{model} ({platform}; {arch})
|
||||||
// 示例: GeminiCLI/0.33.1/gemini-2.5-pro (darwin; arm64)
|
// 示例: GeminiCLI/0.33.1/gemini-2.5-pro (darwin; arm64)
|
||||||
|
// 注意: 不使用 runtime.GOOS/GOARCH — 服务器是 Linux,但要模拟桌面客户端
|
||||||
|
// 注意: Node.js 用 x64 不是 amd64,arm64 两者一致
|
||||||
func GetGeminiCLIUserAgent(model ...string) string {
|
func GetGeminiCLIUserAgent(model ...string) string {
|
||||||
m := "unknown"
|
m := "unknown"
|
||||||
if len(model) > 0 && model[0] != "" {
|
if len(model) > 0 && model[0] != "" {
|
||||||
m = model[0]
|
m = model[0]
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("GeminiCLI/%s/%s (%s; %s)",
|
return fmt.Sprintf("GeminiCLI/%s/%s (%s; %s)",
|
||||||
defaultGeminiCLIVersion, m, runtime.GOOS, runtime.GOARCH)
|
defaultGeminiCLIVersion, m, defaultFakePlatformOS, defaultFakePlatformArch)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetGeminiCLIGoogAPIClient 返回 x-goog-api-client 头的值
|
// GetGeminiCLIGoogAPIClient 返回 x-goog-api-client 头的值
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user