服务器对浏览器和获取的响应不同

问题描述 投票:0回答:1

我正在尝试从已设置 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>

但是我的浏览器阻止了这种数据负载: Firefox error Message

您知道我可以做什么来从链接获取实际下载吗

javascript node.js fetch-api cloudflare
1个回答
0
投票

您需要执行 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);
© www.soinside.com 2019 - 2024. All rights reserved.