当 Docker 容器调用接口时返回 Vercel 安全检查点页面(HTML),而不是预期的 JSON API 响应。
Vercel 使用安全机制检测和拦截可疑请求。缺少正确的浏览器特征请求头会触发安全检查点。
我们已经在 transformers/request.go 中添加了完整的浏览器特征请求头:
headers := map[string]string{
"content-type": "application/json",
"authorization": authHeader,
"accept": "application/json, text/event-stream",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9",
"connection": "keep-alive",
"origin": "https://app.factory.ai",
"referer": "https://app.factory.ai/",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
// ... 其他头部
}headers := map[string]string{
"content-type": "application/json",
"authorization": authHeader,
"anthropic-version": "2023-06-01",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9",
"connection": "keep-alive",
"origin": "https://app.factory.ai",
"referer": "https://app.factory.ai/",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
}添加的关键请求头:
accept-encoding: 表明支持压缩accept-language: 语言偏好origin: 请求来源referer: 引用页面sec-fetch-*: 浏览器安全策略头
-
使用自动脚本(推荐):
./rebuild_docker.sh
-
手动部署:
# 停止现有容器 docker-compose down # 清理旧镜像 docker rmi factory-proxy-openai factory-proxy-openai-anthropic # 重新构建(不使用缓存) docker-compose build --no-cache # 启动服务 docker-compose up -d # 查看日志 docker-compose logs -f
-
检查健康状态:
curl http://localhost:8003/v1/health
-
测试 API 调用:
curl -X POST http://localhost:8003/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_proxy_api_key" \ -d '{ "model": "gpt-5-codex", "messages": [{"role": "user", "content": "Hello"}], "stream": false }'
-
检查响应类型:
- ✅ 正确:返回 JSON 格式的 API 响应
- ❌ 错误:返回 HTML 格式的 Vercel 安全检查点页面
症状:401 Unauthorized 错误
解决方案:
# 检查 .env 文件
cat .env
# 确保 FACTORY_API_KEY 正确设置
echo "FACTORY_API_KEY=your_actual_key" > .env症状:容器无法启动
解决方案:
# 检查端口占用
lsof -i :8003
lsof -i :8001
# 修改 docker-compose.yml 中的端口映射症状:请求超时
解决方案:
# 从容器内测试网络
docker exec factory-proxy-openai wget -O- https://app.factory.ai
# 检查 DNS 解析
docker exec factory-proxy-openai nslookup app.factory.ai查看详细日志以诊断问题:
# 实时日志
docker-compose logs -f factory-proxy-openai
# 特定时间段的日志
docker-compose logs --since 10m factory-proxy-openai
# 搜索错误
docker-compose logs factory-proxy-openai | grep -i error-
✅ 成功响应:
✅ gpt-5-codex [openai] stream=false 📥 Factory OpenAI 响应: 200 -
❌ Vercel 拦截:
📥 Factory OpenAI 响应: 403 错误: 解析响应失败: invalid character '<' looking for beginning of value -
❌ API Key 错误:
❌ API Key 验证失败
如果问题仍未解决:
- 收集完整的日志:
docker-compose logs > debug.log - 检查网络连接
- 验证 API Key 的有效性
- 查看 Factory.ai 的状态页面
- 2025-01-14: 添加完整的浏览器特征请求头以绕过 Vercel 安全检查点