mirror of
https://github.com/ZHANGTIANYAO1/teamspeak-music-bot.git
synced 2026-10-02 04:52:50 +08:00
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:
1 parent
dcec26feb1
commit
960ca756a6
1 file changed
+9
-12
+9
-12
@@ -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> {
|
||||
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
|
||||
|
||||
Reference in new issue
Block a user