fix: 使用SPI API获取buvid3替代访问主页 — 可靠解决412问题

之前通过axios访问bilibili.com主页获取cookie失败(axios不解析set-cookie)。
改用专用API: /x/frontend/finger/spi 直接获取buvid3和buvid4值,
构造cookie字符串传入搜索请求。已验证搜索正常返回结果和封面URL。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
saopig1andClaude Opus 4.6 committed 2026-03-30 19:54:21 +08:00
1 parent dcec26feb1
commit 960ca756a6
1 file changed
+9 -12
+9 -12
View File
@@ -38,22 +38,19 @@ export class BiliBiliProvider implements MusicProvider {
}); });
} }
/** Fetch buvid3 cookie from bilibili.com (required by search API) */ /** Fetch buvid3 via SPI API (required by search API to avoid 412) */
private async ensureBuvidCookie(): Promise<void> { private async ensureBuvidCookie(): Promise<void> {
if (this.buvidInitialized) return; if (this.buvidInitialized) return;
this.buvidInitialized = true; this.buvidInitialized = true;
try { try {
const res = await axios.get("https://www.bilibili.com", { const res = await axios.get(
headers: BILIBILI_HEADERS, "https://api.bilibili.com/x/frontend/finger/spi",
maxRedirects: 0, { headers: BILIBILI_HEADERS, timeout: 10000 }
validateStatus: (s) => s < 400, );
timeout: 10000, const b3 = res.data?.data?.b_3;
}); const b4 = res.data?.data?.b_4;
const cookies = res.headers["set-cookie"]; if (b3) {
if (cookies) { this.buvidCookie = `buvid3=${b3}; buvid4=${b4 ?? ""}`;
this.buvidCookie = cookies
.map((c: string) => c.split(";")[0])
.join("; ");
} }
} catch { } catch {
// If it fails, continue without — view/playurl APIs work without buvid // If it fails, continue without — view/playurl APIs work without buvid