File size: 4,540 Bytes
1766992
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
# 动态 Header 改进说明

## 问题背景

之前的实现中,HTTP headers 是硬编码的:
- `sec-ch-ua-platform` 固定为 `"macOS"``"Windows"`
- `sec-ch-ua` 固定为特定的 Chrome 版本
- `Referer``accept-language` 固定不变

这种硬编码的方式容易被 Cursor API 识别为异常请求,导致 403 错误。

## 改进方案

### 1. 动态浏览器指纹生成器 (`utils/headers.go`)

创建了 `HeaderGenerator` 类,实现以下功能:

#### 智能平台选择
- 根据当前操作系统自动选择合适的浏览器配置
- macOS: 支持 Intel (x86) 和 Apple Silicon (arm) 架构
- Windows: 支持多个版本 (10.0, 11.0, 15.0)
- Linux: 标准 x86_64 配置

#### 随机化配置
- **Chrome 版本**: 从 120-130 随机选择
- **语言设置**: 支持 en-US, zh-CN, en-GB, ja-JP
- **Referer**: 随机选择不同的 Cursor 页面
- **User-Agent**: 根据平台和版本动态生成

#### 真实的浏览器指纹
生成的 headers 包含完整的浏览器指纹信息:
```json
{
  "sec-ch-ua-platform": "macOS",
  "sec-ch-ua-platform-version": "14.0.0",
  "sec-ch-ua-arch": "arm",
  "sec-ch-ua-bitness": "64",
  "sec-ch-ua": "\"Google Chrome\";v=\"126\", \"Chromium\";v=\"126\", \"Not(A:Brand\";v=\"24\"",
  "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36..."
}
```

### 2. 自动刷新机制

当遇到 403 错误时:
1. 自动刷新浏览器指纹配置
2. 清除 x-is-human token 缓存
3. 使用新的配置重试请求

### 3. 代码改进

#### 服务初始化
```go
type CursorService struct {
    // ... 其他字段
    headerGenerator *utils.HeaderGenerator
}

func NewCursorService(cfg *config.Config) *CursorService {
    return &CursorService{
        // ... 其他初始化
        headerGenerator: utils.NewHeaderGenerator(),
    }
}
```

#### Headers 生成
```go
// 之前:硬编码
func (s *CursorService) chatHeaders(xIsHuman string) map[string]string {
    return map[string]string{
        "sec-ch-ua-platform": `"macOS"`,  // 固定值
        "sec-ch-ua": `"Google Chrome";v="143"...`,  // 固定版本
        // ...
    }
}

// 现在:动态生成
func (s *CursorService) chatHeaders(xIsHuman string) map[string]string {
    return s.headerGenerator.GetChatHeaders(xIsHuman)
}
```

#### 403 错误处理
```go
if resp.StatusCode == http.StatusForbidden && attempt < maxRetries {
    logrus.Warn("Received 403, refreshing browser fingerprint...")
    
    // 刷新浏览器指纹
    s.headerGenerator.Refresh()
    
    // 清除 token 缓存
    s.scriptMutex.Lock()
    s.scriptCache = ""
    s.scriptCacheTime = time.Time{}
    s.scriptMutex.Unlock()
    
    // 重试
    continue
}
```

## 优势

### 1. 更难被检测
- 每次请求的指纹信息都可能不同
- 模拟真实用户的多样性
- 避免固定模式被识别

### 2. 自动适应
- 根据运行环境自动选择合适的配置
- macOS 上运行自动使用 macOS 配置
- Windows 上运行自动使用 Windows 配置

### 3. 更好的容错性
- 遇到 403 错误自动切换配置
- 增加请求成功率
- 减少人工干预

### 4. 易于维护
- 集中管理浏览器配置
- 易于添加新的平台或版本
- 代码更简洁清晰

## 测试结果

运行测试程序可以看到:
```
浏览器配置:
  平台: macOS
  平台版本: 14.0.0
  架构: arm
  位数: 64
  Chrome 版本: 126
  User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...

生成 5 个随机配置:
1. macOS | Chrome 130 | arm
2. macOS | Chrome 125 | arm
3. macOS | Chrome 130 | x86
4. macOS | Chrome 128 | arm
5. macOS | Chrome 122 | arm
```

每次生成的配置都不同,增加了多样性。

## 使用方法

无需任何配置,直接使用即可:

```bash
# 重新编译
go build -o cursor2api-go

# 运行服务
./cursor2api-go
```

服务会自动:
- 根据操作系统选择合适的浏览器配置
- 为每个请求生成动态 headers
- 遇到 403 错误时自动刷新配置并重试

## 日志示例

启用调试模式后可以看到:
```
DEBU Sending request to Cursor API attempt=1 model=claude-sonnet-4.6
WARN Received 403 Access Denied, refreshing browser fingerprint...
DEBU Refreshed browser fingerprint platform=macOS chrome_version=124
DEBU Sending request to Cursor API attempt=2 model=claude-sonnet-4.6
```

## 未来改进

可以考虑的进一步优化:
1. 添加更多浏览器类型 (Firefox, Safari)
2. 支持移动设备指纹
3. 根据成功率动态调整配置策略
4. 添加指纹轮换策略 (定期刷新)