部署Node.js Stremio插件至Vercel时M3U8链接403 Forbidden求助
解决方案
1. 给请求添加浏览器级别的请求头
目标CDN(milocdn.com)大概率在做请求合法性校验,Vercel默认的请求UA会被识别为服务器爬虫,直接拦截。修改axios请求,模拟浏览器的请求参数:
const { data: streamProviderData } = await axios.get(streamProviderUrl, { headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', 'Referer': 'https://ryderjet.com/' // 必须和嵌入页的主域名一致 } });
如果这样获取的M3U8还是403,那需要让插件做一层转发:不要直接返回M3U8链接,而是提供一个Vercel接口,由接口带上上述请求头去拉取M3U8内容,再转发给客户端。
2. 绕开Vercel的IP限制
很多CDN会屏蔽云服务商的IP段(包括Vercel用的AWS IP),可以试试:
- 给axios请求加代理,用第三方代理服务(注意合规),让请求从非云服务商IP发出,这样获取的M3U8链接会绑定合法IP,不会被拦截。
- 在Vercel控制台切换部署区域,不同区域的IP段可能没被目标CDN拉黑。
3. 应对ASN绑定限制
对比两个链接的asn字段:本地是2860(你的ISP),Vercel是14618(AWS),说明目标CDN会验证请求来源的自治系统编号,只有生成链接时对应的ASN才能访问。这种情况下,要么用代理模拟本地ASN的IP,要么用Vercel接口做转发,由服务器带上合法请求头去拉流。
4. 调整Vercel函数配置
在项目根目录创建vercel.json,增加函数的超时时间和内存分配,避免请求中途被中断:
{ "functions": { "api/*.js": { "maxDuration": 60, "memory": 1024 } } }
内容的提问来源于stack exchange,提问作者Andre
相关产品推荐
相关产品推荐

