# 故障排除指南 ## 403 Access Denied 错误 ### 问题描述 在使用一段时间后,服务突然开始返回 `403 Access Denied` 错误: ``` ERRO[0131] Cursor API returned non-OK status status_code=403 ERRO[0131] Failed to create chat completion error="{\"error\":\"Access denied\"}" ``` ### 原因分析 1. **Token 过期**: `x-is-human` token 缓存时间过长,导致 token 失效 2. **频率限制**: 短时间内发送过多请求触发了 Cursor API 的速率限制 3. **重复 Token**: 使用相同的 token 进行多次请求被识别为异常行为 ### 解决方案 #### 1. 已实施的自动修复 最新版本已经包含以下改进: - **动态浏览器指纹**: 每次请求使用真实且随机的浏览器指纹信息 - 根据操作系统自动选择合适的平台配置 (Windows/macOS/Linux) - 随机 Chrome 版本 (120-130) - 随机语言设置和 Referer - 真实的 User-Agent 和 sec-ch-ua headers - **缩短缓存时间**: 将 `x-is-human` token 缓存时间从 30 分钟缩短到 1 分钟 - **自动重试机制**: 遇到 403 错误时自动清除缓存并重试(最多 2 次) - **指纹刷新**: 403 错误时自动刷新浏览器指纹配置 - **错误恢复**: 失败时自动清除缓存,确保下次请求使用新 token - **指数退避**: 重试时使用递增的等待时间 #### 2. 手动解决步骤 如果问题持续存在: 1. **重启服务**: ```bash # 停止当前服务 (Ctrl+C) # 重新启动 ./cursor2api-go ``` 2. **检查日志**: 查看是否有以下日志: - `Received 403 Access Denied, clearing token cache and retrying...` - 自动重试 - `Failed to fetch x-is-human token` - Token 获取失败 - `Fetched x-is-human token` - Token 获取成功 3. **等待冷却期**: 如果频繁遇到 403 错误,建议等待 5-10 分钟后再使用 4. **检查网络**: 确保能够访问 `https://cursor.com` #### 3. 预防措施 1. **控制请求频率**: 避免在短时间内发送大量请求 2. **监控日志**: 注意 `x-is-human token` 的获取频率 3. **合理配置超时**: 在 `.env` 文件中设置合理的超时时间 ### 配置建议 在 `.env` 文件中: ```bash TIMEOUT=120 # 增加超时时间,避免频繁重试 MAX_INPUT_LENGTH=100000 # 限制输入长度,减少请求大小 ``` ### 调试模式 如果需要查看详细的调试信息,可以启用调试模式: ```bash # 方式 1: 修改 .env 文件 DEBUG=true # 方式 2: 使用环境变量 DEBUG=true ./cursor2api-go ``` 这将显示: - 每次请求的 `x-is-human` token (前 50 字符) - 请求的 payload 大小 - 重试次数 - 详细的错误信息 ## 其他常见问题 ### Cloudflare 403 错误 如果看到 `Cloudflare 403` 错误,说明请求被 Cloudflare 防火墙拦截。这通常是因为: - IP 被标记为可疑 - User-Agent 不匹配 - 缺少必要的浏览器指纹 **解决方案**: 检查 `.env` 文件中的浏览器指纹配置(`USER_AGENT`、`UNMASKED_VENDOR_WEBGL`、`UNMASKED_RENDERER_WEBGL`)是否正确。 ### 连接超时 如果频繁出现连接超时: 1. 检查网络连接 2. 增加 `.env` 文件中的 `TIMEOUT` 配置值 3. 检查防火墙设置 ### Token 获取失败 如果无法获取 `x-is-human` token: 1. 检查 `.env` 文件中的 `SCRIPT_URL` 配置是否正确 2. 确保 `jscode/main.js` 和 `jscode/env.js` 文件存在 3. 检查 Node.js 环境是否正常安装(Node.js 18+) ## 联系支持 如果问题仍未解决,请提供以下信息: 1. 完整的错误日志 2. `.env` 文件配置(隐藏敏感信息如 `API_KEY`) 3. 使用的 Go 版本和 Node.js 版本 4. 操作系统信息