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