fix: dio cookie读写
This commit is contained in:
@ -15,18 +15,9 @@ import 'package:dio_cookie_manager/dio_cookie_manager.dart';
|
|||||||
class Request {
|
class Request {
|
||||||
static final Request _instance = Request._internal();
|
static final Request _instance = Request._internal();
|
||||||
static late CookieManager cookieManager;
|
static late CookieManager cookieManager;
|
||||||
|
static late final Dio dio;
|
||||||
factory Request() => _instance;
|
factory Request() => _instance;
|
||||||
|
|
||||||
static Dio dio = Dio()
|
|
||||||
..httpClientAdapter = Http2Adapter(
|
|
||||||
ConnectionManager(
|
|
||||||
idleTimeout: const Duration(milliseconds: 10000),
|
|
||||||
// Ignore bad certificate
|
|
||||||
onClientCreate: (_, config) => config.onBadCertificate = (_) => true,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
/// 设置cookie
|
/// 设置cookie
|
||||||
static setCookie() async {
|
static setCookie() async {
|
||||||
Box user = GStrorage.user;
|
Box user = GStrorage.user;
|
||||||
@ -63,16 +54,6 @@ class Request {
|
|||||||
dio.options.headers['cookie'] = cookieString;
|
dio.options.headers['cookie'] = cookieString;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 移除cookie
|
|
||||||
static removeCookie() async {
|
|
||||||
await cookieManager.cookieJar
|
|
||||||
.saveFromResponse(Uri.parse(HttpString.baseUrl), []);
|
|
||||||
await cookieManager.cookieJar
|
|
||||||
.saveFromResponse(Uri.parse(HttpString.baseApiUrl), []);
|
|
||||||
cookieManager.cookieJar.deleteAll();
|
|
||||||
dio.interceptors.add(cookieManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 从cookie中获取 csrf token
|
// 从cookie中获取 csrf token
|
||||||
static Future<String> getCsrf() async {
|
static Future<String> getCsrf() async {
|
||||||
var cookies = await cookieManager.cookieJar
|
var cookies = await cookieManager.cookieJar
|
||||||
@ -114,7 +95,16 @@ class Request {
|
|||||||
options.headers['x-bili-aurora-zone'] = 'sh001';
|
options.headers['x-bili-aurora-zone'] = 'sh001';
|
||||||
options.headers['referer'] = 'https://www.bilibili.com/';
|
options.headers['referer'] = 'https://www.bilibili.com/';
|
||||||
}
|
}
|
||||||
dio.options = options;
|
|
||||||
|
dio = Dio(options)
|
||||||
|
..httpClientAdapter = Http2Adapter(
|
||||||
|
ConnectionManager(
|
||||||
|
idleTimeout: const Duration(milliseconds: 10000),
|
||||||
|
// Ignore bad certificate
|
||||||
|
onClientCreate: (_, config) => config.onBadCertificate = (_) => true,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
//添加拦截器
|
//添加拦截器
|
||||||
dio.interceptors.add(ApiInterceptor());
|
dio.interceptors.add(ApiInterceptor());
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,7 @@ class SettingController extends GetxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loginOut() async {
|
loginOut() async {
|
||||||
await Request.removeCookie();
|
await Request.cookieManager.cookieJar.deleteAll();
|
||||||
await Get.find<MineController>().resetUserInfo();
|
await Get.find<MineController>().resetUserInfo();
|
||||||
userLogin.value = user.get(UserBoxKey.userLogin) ?? false;
|
userLogin.value = user.get(UserBoxKey.userLogin) ?? false;
|
||||||
userInfoCache.put('userInfoCache', null);
|
userInfoCache.put('userInfoCache', null);
|
||||||
|
|||||||
@ -59,16 +59,7 @@ class WebviewController extends GetxController {
|
|||||||
'https://passport.bilibili.com/web/sso/exchange_cookie') ||
|
'https://passport.bilibili.com/web/sso/exchange_cookie') ||
|
||||||
url.startsWith('https://m.bilibili.com/'))) {
|
url.startsWith('https://m.bilibili.com/'))) {
|
||||||
try {
|
try {
|
||||||
var cookies =
|
await SetCookie.onSet();
|
||||||
await WebviewCookieManager().getCookies(HttpString.baseUrl);
|
|
||||||
var apiCookies = await WebviewCookieManager()
|
|
||||||
.getCookies(HttpString.baseApiUrl);
|
|
||||||
var tCookies =
|
|
||||||
await WebviewCookieManager().getCookies(HttpString.tUrl);
|
|
||||||
await SetCookie.onSet(cookies, HttpString.baseUrl);
|
|
||||||
await SetCookie.onSet(apiCookies, HttpString.baseApiUrl);
|
|
||||||
await SetCookie.onSet(tCookies, HttpString.tUrl);
|
|
||||||
await UserHttp.userInfo();
|
|
||||||
var result = await UserHttp.userInfo();
|
var result = await UserHttp.userInfo();
|
||||||
UserHttp.thirdLogin();
|
UserHttp.thirdLogin();
|
||||||
print('网页登录: $result');
|
print('网页登录: $result');
|
||||||
|
|||||||
@ -1,27 +1,19 @@
|
|||||||
import 'package:cookie_jar/cookie_jar.dart';
|
import 'package:pilipala/http/constants.dart';
|
||||||
import 'package:pilipala/http/init.dart';
|
import 'package:pilipala/http/init.dart';
|
||||||
import 'package:pilipala/utils/utils.dart';
|
import 'package:webview_cookie_manager/webview_cookie_manager.dart';
|
||||||
|
|
||||||
class SetCookie {
|
class SetCookie {
|
||||||
static onSet(List cookiesList, String url) async {
|
static onSet() async {
|
||||||
// domain url
|
var cookies = await WebviewCookieManager().getCookies(HttpString.baseUrl);
|
||||||
List<Cookie> jarCookies = [];
|
await Request.cookieManager.cookieJar
|
||||||
if (cookiesList.isNotEmpty) {
|
.saveFromResponse(Uri.parse(HttpString.baseUrl), cookies);
|
||||||
for (var i in cookiesList) {
|
|
||||||
Cookie jarCookie = Cookie(i.name, i.value);
|
cookies = await WebviewCookieManager().getCookies(HttpString.baseApiUrl);
|
||||||
jarCookies.add(jarCookie);
|
await Request.cookieManager.cookieJar
|
||||||
}
|
.saveFromResponse(Uri.parse(HttpString.baseApiUrl), cookies);
|
||||||
}
|
|
||||||
String cookiePath = await Utils.getCookiePath();
|
cookies = await WebviewCookieManager().getCookies(HttpString.tUrl);
|
||||||
PersistCookieJar cookieJar = PersistCookieJar(
|
await Request.cookieManager.cookieJar
|
||||||
ignoreExpires: true,
|
.saveFromResponse(Uri.parse(HttpString.tUrl), cookies);
|
||||||
storage: FileStorage(cookiePath),
|
|
||||||
);
|
|
||||||
await cookieJar.saveFromResponse(Uri.parse(url), jarCookies);
|
|
||||||
// 重新设置 cookie
|
|
||||||
Request.setCookie();
|
|
||||||
Request.cookieManager.cookieJar
|
|
||||||
.saveFromResponse(Uri.parse(url), jarCookies);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user