Vercel Serverless

提交请求与密钥,由中转服务代你转发

浏览器只与本服务通信,上游密钥保存在 Vercel 环境变量里,不会暴露在前端或网络请求里。

接口地址

请求

等待发送

响应

尚未发送请求
响应内容会显示在这里。
响应头
-

部署与环境变量

把本目录推到 GitHub 后在 Vercel 导入,或直接执行 vercel --prod。至少需要设置 ACCESS_TOKEN。

函数区域已在 vercel.json 设为 hkg1(香港):上游在中国大陆时,默认的 iad1(美国)跨境连接会挂起直到超时。修改区域后必须重新部署才会生效;若 hkg1 仍不通,可换 sin1 或改用国内服务器中转。

变量必填说明
ACCESS_TOKEN是客户端访问口令,通过 x-cnptoken(或 x-proxy-token)提交。
ALLOWED_ORIGINS否允许调用本服务的浏览器来源,逗号分隔,例如 https://xy.odkkk.com;不填则允许所有站点,服务端/curl 调用不受影响。
UPSTREAM_KEY否服务端保存的上游密钥,默认以 Authorization: Bearer ... 注入请求;仅在配置 ALLOWED_HOSTS 时建议使用。
UPSTREAM_KEYS否JSON 映射,按上游域名分配密钥,优先级高于 UPSTREAM_KEY,例如 {"api.openai.com":"sk-xxx"}。
UPSTREAM_KEY_HEADER否注入密钥使用的头部名,默认 authorization。
UPSTREAM_KEY_PREFIX否密钥前缀,默认 Bearer ;使用 x-api-key 类头部时可设为空。
ALLOWED_HOSTS否允许转发的域名白名单,逗号分隔,支持 *.example.com;不填则允许任意公网域名。
UPSTREAM_TIMEOUT_MS否上游超时,默认 55000 毫秒(受 Vercel 函数最大执行时长限制)。
ALLOW_PRIVATE_HOSTS否设为 true 才允许访问内网/本机地址,仅建议本地调试使用。

调用约定(xy.odkkk.com)

把原请求地址的域名换成代理域名,路径(任意路径,不限 /api/...,根路径也可以)、查询参数和其余请求头都保持不变,只额外加两个头:x-cnptoken 和 x-qulist(原始主机名)。代理固定用 https,把当前路径与查询参数拼到该主机上,并原样转发 authorization、cookie、referer 等头部。

带 x-cnptoken 的请求全部走代理;浏览器直接打开域名(不带该头)时仍显示本测试页。

curl "https://your-app.vercel.app/api/product/taobao/getAuthorizeList?channel=3&version=1.3.3.1" \
  -H "x-cnptoken: qQ6wrCGUeY2FPB9zKuyUDeryOMFxOglq" \
  -H "x-qulist: api2.goofish.pro" \
  -H "content-type: application/x-www-form-urlencoded" \
  -H "authorization: <原请求的 authorization>" \
  -d 'source='

前端同样只改域名:

fetch('https://your-app.vercel.app/api/product/taobao/getAuthorizeList?channel=3', {
  method: 'POST',
  headers: {
    'x-cnptoken': 'qQ6wrCGUeY2FPB9zKuyUDeryOMFxOglq',
    'x-qulist': 'api2.goofish.pro',
    'content-type': 'application/x-www-form-urlencoded',
  },
  body: 'source=',
})

也保留通用方式:直接调用 /api/proxy,用 x-target-url 指定完整地址(测试页即用此方式);请求体、响应体(含 SSE 流式输出)均原样透传。