diff --git a/lib/http/html.dart b/lib/http/html.dart index e4e1548de..3614faf49 100644 --- a/lib/http/html.dart +++ b/lib/http/html.dart @@ -14,12 +14,21 @@ class HtmlHttp { var response = await Request().get( "https://www.bilibili.com/opus/$id", extra: {'ua': 'pc'}, + options: Options( + followRedirects: false, + validateStatus: (status) => true, + ), ); if (response.data is! String && response.data is! List) { return; } try { if (response.data.contains('Redirecting to')) { + String? cvid = RegExp(r'cv\d+').firstMatch(response.data)?.group(0); + if (cvid != null) { + return await reqReadHtml(cvid, dynamicType, false); + } + RegExp regex = RegExp(r'//([\w\.]+)/(\w+)/(\w+)'); Match match = regex.firstMatch(response.data)!; String matchedString = match.group(0)!; @@ -75,11 +84,13 @@ class HtmlHttp { } // read - static Future reqReadHtml(id, dynamicType) async { - String? redirectUrl = await UrlUtils.parseRedirectUrl( - 'https://www.bilibili.com/$dynamicType/$id/'); - if (redirectUrl != null) { - return await reqHtml(redirectUrl.split('/').last, dynamicType); + static Future reqReadHtml(id, dynamicType, [bool redirect = true]) async { + if (redirect) { + String? redirectUrl = await UrlUtils.parseRedirectUrl( + 'https://www.bilibili.com/$dynamicType/$id/'); + if (redirectUrl != null) { + return await reqHtml(redirectUrl.split('/').last, dynamicType); + } } var response = await Request().get(