我正在尝试从已设置 Cloudflare 的服务器获取下载链接。
当我使用我的浏览器发出请求时,它响应得很好(下载文件),但是当使用 fetch() 获取时,它以 HTML 页面响应。
我已经尝试过模仿来自浏览器的请求,但它仍然以 HTML 响应
fetch(url, {
method: "GET",
mode: "cors",
credentials: "include",
headers: {
"User-Agent":
"Mozilla/5.0 ...",
Accept:
"text/html,application/xhtml+xml,application/xml ...",
...
},
})
检查 HTML,我发现了一个 内联函数 ,它显然从所需的网站加载数据:
<script>(function(){window._cf_chl_opt={cvId: '3',cZone: "...", cUPMDTk:"... .m3u8?"}()</script>
您知道我可以做什么来从链接获取实际下载吗?
您需要执行 URL 返回的 JavaScript。
async doDownload(url) {
let response = await fetch(url, {
method: "GET",
mode: "cors",
credentials: "include",
headers: {
"User-Agent": "Mozilla/5.0 ...",
Accept: "text/html,application/xhtml+xml,application/xml ...",
...
},
});
let text = await response.text();
let match = text.match(/<script>(.*)<\/script>/);
if (match) {
eval(match[1]);
}
}
doDownload(url);