You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Vercel后调用Udemy API遇403错误,本地运行正常

解决FastAPI部署到Vercel后调用Udemy API出现403 Forbidden的问题

可能的原因及解决步骤

1. 请求头标识被Udemy拦截

Udemy的API会校验请求的来源特征,Vercel服务器默认的请求头会被识别为非浏览器请求,直接触发拦截。

解决方法:手动设置与浏览器一致的请求头,示例代码:

import httpx
from fastapi import FastAPI

app = FastAPI()

@app.get("/verify-udemy")
async def verify_udemy(cookie: str):
    # 从前端获取用户的Udemy认证Cookie,或从请求头Cookie中提取
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
        "Referer": "https://www.udemy.com/",
        "Cookie": cookie  # 替换为用户真实的Udemy认证Cookie
    }
    async with httpx.AsyncClient() as client:
        resp = await client.get(
            "https://www.udemy.com/api-2.0/contexts/me/?header=True",
            headers=headers
        )
        return {"status": resp.status_code, "data": resp.json() if resp.status_code == 200 else resp.text}

2. Vercel服务器IP被拉黑

Vercel的共享IP池可能因大量爬虫类请求被Udemy加入黑名单,导致所有从Vercel发出的请求都被拦截。

解决方法:

  • 配置Vercel自定义域名,更换请求来源的域名标识
  • 使用第三方代理IP转发请求,在httpx中配置代理:
async with httpx.AsyncClient(proxies="http://your-proxy-ip:port") as client:
    # 后续请求逻辑不变

3. 认证Cookie传递异常

本地开发时,浏览器会自动携带Udemy的会话Cookie到后端;部署到Vercel后,后端需要明确从前端请求中获取并转发Cookie,否则请求会被判定为未登录。

解决方法:

  • 前端调用后端接口时,将浏览器中Udemy的Cookie(如access_token、udemy_session等字段)传递给后端
  • 后端严格按照Udemy的要求,将这些Cookie完整添加到请求头中再转发

4. 缺少必要的请求头字段

Udemy的API可能需要额外字段(如X-Requested-With)识别合法请求,本地浏览器请求会自动携带,但后端请求需手动添加。

可尝试在headers中加入:

"X-Requested-With": "XMLHttpRequest"

额外排查建议

  • 在Vercel函数中打印请求的完整头信息和响应内容,对比本地请求的差异,定位缺失字段
  • 通过在函数中执行httpx.get("https://api.ipify.org").text获取Vercel服务器IP,直接用该IP访问Udemy API,测试是否能正常请求

内容的提问来源于stack exchange,提问作者Blog Khóa Học

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:33:28