bilibili Video CDN

change bilibili video CDN URL

目前为 2023-08-05 提交的版本。查看 最新版本

// ==UserScript==
// @name         bilibili Video CDN
// @version      0.0.5
// @description  change bilibili video CDN URL
// @author       bevis
// @match        https://www.bilibili.com/*
// @license      MIT
// @namespace https://greasyfork.org/users/429936
// ==/UserScript==

const bilivideoRegex = /^https:\/\/[a-z.-\d]*(bilivideo.com)/i;
const akamaizedRegex = /^https:\/\/upos[a-z.-\d]*(akamaized.net)/i;

const goodBilibiliCDNS = [
    // 'upos-sz-mirrorks3.bilivideo.com',
    // 'upos-sz-mirrorks3b.bilivideo.com',
    // 'upos-sz-mirrorks3c.bilivideo.com',
    // 'upos-sz-mirrorks32.bilivideo.com',
    // 'upos-sz-mirrorcos.bilivideo.com',
    // 'upos-sz-mirrorcosb.bilivideo.com',
    // 'upos-sz-mirrorbos.bilivideo.com',
    // 'upos-sz-mirrorhw.bilivideo.com',
    // 'upos-sz-mirrorhwb.bilivideo.com',
    // 'upos-sz-upcdnbda2.bilivideo.com',
    // 'upos-sz-upcdnws.bilivideo.com',
    // 'upos-sz-upcdnhw.bilivideo.com',
    // 'upos-tf-all-js.bilivideo.com',
    // 'cn-hk-eq-bcache-01.bilivideo.com',
    // 'upos-hz-mirrorakam.akamaized.net',
    'upos-sz-mirroraliov.bilivideo.com',
];
const httpRequestOriginOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function (method, url, ...args) {
    const isBiliBiliVideo = bilivideoRegex.test(url) || akamaizedRegex.test(url);
    if (!isBiliBiliVideo) {
        return httpRequestOriginOpen.apply(this, [method, url, ...args]);
    }
    const videoUrl = new URL(url);
    const isGoodUrl = goodBilibiliCDNS.includes(videoUrl.host);
    if (isGoodUrl) {
        return httpRequestOriginOpen.apply(this, [method, url, ...args]);
    } else {
        const goodUrl = goodBilibiliCDNS[Math.floor(Math.random() * goodBilibiliCDNS.length)];
        videoUrl.host = goodUrl;
        return httpRequestOriginOpen.apply(this, [method, videoUrl.href, ...args]);
    }
};