const express = require('express'); const axios = require('axios'); const cors = require('cors'); const app = express(); const port = 3000; app.use(cors()); app.use(express.static('./public')); // public文件夹放你的前端html // TVBox固定请求头(全程用这套访问外部源,骗过浏览器检测拦截) const TVBOX_HEADERS = { "User-Agent": "okhttp/3.15.0 TVBox/Android", "Accept": "*/*", "Accept-Language": "zh-CN,zh;q=0.9", "Cache-Control": "no-cache", "Connection": "keep-alive", "X-Requested-With": "com.tvbox.app", "Referer": "" }; // 原始你的订阅地址 const SOURCE_API = "https://ua.fongmi.eu.org/box.php?url=http://129.211.14.102:27777/api.php?token=c164b1427bac7946a974cccd8909adcd"; // 接口1:获取频道m3u8列表(前端浏览器调用这个同域接口拿列表) app.get('/getList', async (req, res) => { try { const resp = await axios.get(SOURCE_API, { headers: TVBOX_HEADERS }); res.json(resp.data); } catch (err) { res.status(500).json({ err: err.message }); } }); // 接口2:中转所有m3u8/ts视频流(核心TVBox伪装转发,彻底绕过源的浏览器拦截) app.get('/proxyStream', async (req, res) => { const targetUrl = decodeURIComponent(req.query.target); if (!targetUrl) return res.send('缺少target参数'); try { const streamResp = await axios({ method: 'GET', url: targetUrl, headers: TVBOX_HEADERS, responseType: 'stream' }); // 透传视频流的全部响应头 Object.keys(streamResp.headers).forEach(key => { res.setHeader(key, streamResp.headers[key]); }); streamResp.data.pipe(res); } catch (e) { res.status(500).send('流加载失败'); } }); app.listen(port, () => { console.log(`中转服务运行在: http://127.0.0.1:${port}`); });