mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
committed by
GitHub
parent
a46bde68f5
commit
c090cae1a1
@@ -164,10 +164,8 @@ class Request {
|
||||
: http11Adapter;
|
||||
|
||||
// 先于其他Interceptor
|
||||
if (GStorage.retryCount > 0) {
|
||||
dio.interceptors
|
||||
.add(RetryInterceptor(GStorage.retryCount, GStorage.retryDelay));
|
||||
}
|
||||
dio.interceptors
|
||||
.add(RetryInterceptor(GStorage.retryCount, GStorage.retryDelay));
|
||||
|
||||
// 日志拦截器 输出请求、响应内容
|
||||
if (BuildConfig.isDebug) {
|
||||
@@ -222,7 +220,7 @@ class Request {
|
||||
* post请求
|
||||
*/
|
||||
Future<Response> post(url,
|
||||
{data, queryParameters, options, cancelToken, isRedirect}) async {
|
||||
{data, queryParameters, options, cancelToken}) async {
|
||||
// debugPrint('post-data: $data');
|
||||
Response response;
|
||||
try {
|
||||
@@ -236,20 +234,6 @@ class Request {
|
||||
// debugPrint('post success: ${response.data}');
|
||||
return response;
|
||||
} on DioException catch (e) {
|
||||
if (isRedirect != true &&
|
||||
const [301, 302, 303, 307, 308].contains(e.response?.statusCode)) {
|
||||
String? redirectUrl = e.response?.headers['location']?.firstOrNull;
|
||||
if (redirectUrl != null) {
|
||||
return await post(
|
||||
redirectUrl,
|
||||
data: data,
|
||||
queryParameters: queryParameters,
|
||||
options: options,
|
||||
cancelToken: cancelToken,
|
||||
isRedirect: true,
|
||||
);
|
||||
}
|
||||
}
|
||||
AccountManager.toast(e);
|
||||
Response errResponse = Response(
|
||||
data: {
|
||||
|
||||
@@ -35,10 +35,8 @@ class LiveHttp {
|
||||
'origin': 'https://live.bilibili.com',
|
||||
'referer': 'https://live.bilibili.com/',
|
||||
'user-agent': Request.headerUa(type: 'pc'),
|
||||
if (gaiaVtoken == null) 'cookie': 'x-bili-gaia-vtoken=$gaiaVtoken'
|
||||
},
|
||||
extra: gaiaVtoken == null
|
||||
? null
|
||||
: {'cookie': 'x-bili-gaia-vtoken=$gaiaVtoken'},
|
||||
),
|
||||
);
|
||||
if (res.data['code'] == 0) {
|
||||
|
||||
@@ -10,26 +10,56 @@ class RetryInterceptor extends Interceptor {
|
||||
|
||||
@override
|
||||
void onError(DioException err, ErrorInterceptorHandler handler) {
|
||||
if (err.response != null) return handler.next(err);
|
||||
switch (err.type) {
|
||||
case DioExceptionType.connectionError:
|
||||
case DioExceptionType.connectionTimeout:
|
||||
case DioExceptionType.sendTimeout:
|
||||
case DioExceptionType.unknown:
|
||||
if ((err.requestOptions.extra['_rt'] ??= 0) < _count) {
|
||||
Future.delayed(
|
||||
Duration(
|
||||
milliseconds: ++err.requestOptions.extra['_rt'] * _delay),
|
||||
() => Request.dio
|
||||
.fetch(err.requestOptions)
|
||||
.then(handler.resolve)
|
||||
.onError<DioException>((error, _) => handler.reject(error)));
|
||||
} else {
|
||||
handler.next(err);
|
||||
if (err.response != null) {
|
||||
final options = err.requestOptions;
|
||||
if (options.followRedirects && options.maxRedirects > 0) {
|
||||
final status = err.response!.statusCode;
|
||||
if (status != null && 300 <= status && status < 400) {
|
||||
var redirectUrl = err.response!.headers.value('location');
|
||||
if (redirectUrl != null) {
|
||||
var uri = Uri.parse(redirectUrl);
|
||||
if (!uri.hasScheme) {
|
||||
uri = options.uri.resolveUri(uri);
|
||||
redirectUrl = uri.toString();
|
||||
}
|
||||
(options..path = redirectUrl).maxRedirects--;
|
||||
if (status == 303) {
|
||||
options.data = null;
|
||||
options.method = 'GET';
|
||||
}
|
||||
Request.dio
|
||||
.fetch(options)
|
||||
.then((i) => handler.resolve(i
|
||||
..redirects.add(RedirectRecord(status, options.method, uri))
|
||||
..isRedirect = true))
|
||||
.onError<DioException>((error, _) => handler.next(error));
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
default:
|
||||
return handler.next(err);
|
||||
}
|
||||
return handler.next(err);
|
||||
} else {
|
||||
switch (err.type) {
|
||||
case DioExceptionType.connectionError:
|
||||
case DioExceptionType.connectionTimeout:
|
||||
case DioExceptionType.sendTimeout:
|
||||
case DioExceptionType.unknown:
|
||||
if ((err.requestOptions.extra['_rt'] ??= 0) < _count) {
|
||||
Future.delayed(
|
||||
Duration(
|
||||
milliseconds: ++err.requestOptions.extra['_rt'] * _delay),
|
||||
() => Request.dio
|
||||
.fetch(err.requestOptions)
|
||||
.then(handler.resolve)
|
||||
.onError<DioException>(
|
||||
(error, _) => handler.reject(error)));
|
||||
} else {
|
||||
handler.next(err);
|
||||
}
|
||||
return;
|
||||
default:
|
||||
return handler.next(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user