Skip to content

Instantly share code, notes, and snippets.

@yige233
Created April 21, 2024 15:20
Show Gist options
  • Save yige233/90dd70bb9a8462804435c9e59fb0188d to your computer and use it in GitHub Desktop.
Save yige233/90dd70bb9a8462804435c9e59fb0188d to your computer and use it in GitHub Desktop.
/**
* https://www.bilibili.com/video/BV12142127je/
* 通过简单的客户端脚本,来获取自称所谓“被加密”的视频。
* 这是另一个可供“生成加密链接”的直链视频:https://s1.hdslb.com/bfs/static/player/media/error.mp4
* @param {*} url 要下载的视频的链接。如果没有提供,会试图获取演示视频url。
* @param {*} referer 该视频链接对应的referer。默认为www.maidenwork.com
* @returns
*/
async function downloadVideo(url, referer = "www.maidenwork.com") {
const demo = await fetch("https://www.maidenwork.com/", { method: "head" }); //先请求特定url,让服务器记录ip。同时试图获取演示视频url
const videoURL = url || demo.headers.get("src");
if (!videoURL) {
return console.warn("没有提供视频url,且无法使用默认视频url");
}
const parsedUrl = new URL(videoURL);
parsedUrl.host = "www.maidenwork.com"; //如果没有www,是跨域请求,而服务端不允许跨域请求带range头
const res = await fetch(parsedUrl.href, { headers: { range: "", referer } }); //获取视频。提供referer和range(大概是通过有无range判断请求是否来自video标签)
const a = document.createElement("a"); //执行下载操作
a.href = URL.createObjectURL(await res.blob());
a.download = "视频.mp4";
document.body.append(a);
a.click();
a.remove();
}
downloadVideo();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment