diff --git a/lib/http/init.dart b/lib/http/init.dart
index faa57dd5..6a90a87d 100644
--- a/lib/http/init.dart
+++ b/lib/http/init.dart
@@ -29,7 +29,7 @@ class Request {
late String systemProxyPort;
static final RegExp spmPrefixExp =
RegExp(r'');
- static late String buvid;
+ static String? buvid;
/// 设置cookie
static setCookie() async {
@@ -72,7 +72,6 @@ class Request {
.map((Cookie cookie) => '${cookie.name}=${cookie.value}')
.join('; ');
- buvid = cookie.firstWhere((e) => e.name == 'buvid3').value;
dio.options.headers['cookie'] = cookieString;
}
@@ -87,6 +86,30 @@ class Request {
return token;
}
+ static Future getBuvid() async {
+ if (buvid != null) {
+ return buvid!;
+ }
+
+ final List cookies = await cookieManager.cookieJar
+ .loadForRequest(Uri.parse(HttpString.baseUrl));
+ buvid = cookies.firstWhere((cookie) => cookie.name == 'buvid3').value;
+ if (buvid == null) {
+ try {
+ var result = await Request().get(
+ "${HttpString.apiBaseUrl}/x/frontend/finger/spi",
+ );
+ buvid = result["data"]["b_3"].toString();
+ } catch (e) {
+ // 处理请求错误
+ buvid = '';
+ print("Error fetching buvid: $e");
+ }
+ }
+
+ return buvid!;
+ }
+
static setOptionsHeaders(userInfo, bool status) {
if (status) {
dio.options.headers['x-bili-mid'] = userInfo.mid.toString();
diff --git a/lib/pages/live_room/controller.dart b/lib/pages/live_room/controller.dart
index 99025dce..5d4e2b67 100644
--- a/lib/pages/live_room/controller.dart
+++ b/lib/pages/live_room/controller.dart
@@ -47,6 +47,7 @@ class LiveRoomController extends GetxController {
RxMap joinRoomTip = {'userName': '', 'message': ''}.obs;
// 直播间弹幕开关 默认打开
RxBool danmakuSwitch = true.obs;
+ late String buvid;
@override
void onInit() {
@@ -63,6 +64,7 @@ class LiveRoomController extends GetxController {
if (liveItem != null && liveItem.cover != null && liveItem.cover != '') {
cover = liveItem.cover;
}
+ Request.getBuvid().then((value) => buvid = value);
}
// CDN优化
enableCDN = setting.get(SettingBoxKey.enableCDN, defaultValue: true);
@@ -249,7 +251,7 @@ class LiveRoomController extends GetxController {
"uid": userId,
"roomid": roomId,
"protover": 3,
- "buvid": Request.buvid,
+ "buvid": buvid,
"platform": "web",
"type": 2,
"key": token,