From 960ca756a642576c9f875175073f42e979d931ae Mon Sep 17 00:00:00 2001 From: saopig1 Date: Mon, 30 Mar 2026 19:54:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BD=BF=E7=94=A8SPI=20API=E8=8E=B7?= =?UTF-8?q?=E5=8F=96buvid3=E6=9B=BF=E4=BB=A3=E8=AE=BF=E9=97=AE=E4=B8=BB?= =?UTF-8?q?=E9=A1=B5=20=E2=80=94=20=E5=8F=AF=E9=9D=A0=E8=A7=A3=E5=86=B3412?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 之前通过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) --- src/music/bilibili.ts | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/music/bilibili.ts b/src/music/bilibili.ts index 8a17835..34b8a73 100644 --- a/src/music/bilibili.ts +++ b/src/music/bilibili.ts @@ -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 { if (this.buvidInitialized) return; this.buvidInitialized = true; try { - const res = await axios.get("https://www.bilibili.com", { - headers: BILIBILI_HEADERS, - maxRedirects: 0, - validateStatus: (s) => s < 400, - timeout: 10000, - }); - const cookies = res.headers["set-cookie"]; - if (cookies) { - this.buvidCookie = cookies - .map((c: string) => c.split(";")[0]) - .join("; "); + const res = await axios.get( + "https://api.bilibili.com/x/frontend/finger/spi", + { headers: BILIBILI_HEADERS, timeout: 10000 } + ); + const b3 = res.data?.data?.b_3; + const b4 = res.data?.data?.b_4; + if (b3) { + this.buvidCookie = `buvid3=${b3}; buvid4=${b4 ?? ""}`; } } catch { // If it fails, continue without — view/playurl APIs work without buvid