fix: dio cookie读写

This commit is contained in:
guozhigq
2023-08-18 09:30:31 +08:00
parent be1cc25d12
commit 04d953a3a2
4 changed files with 27 additions and 54 deletions

View File

@ -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());

View File

@ -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);

View File

@ -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');

View File

@ -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;
} }
} }