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 {
static final Request _instance = Request._internal();
static late CookieManager cookieManager;
static late final Dio dio;
factory Request() => _instance;
static Dio dio = Dio()
..httpClientAdapter = Http2Adapter(
ConnectionManager(
idleTimeout: const Duration(milliseconds: 10000),
// Ignore bad certificate
onClientCreate: (_, config) => config.onBadCertificate = (_) => true,
),
);
/// 设置cookie
static setCookie() async {
Box user = GStrorage.user;
@ -63,16 +54,6 @@ class Request {
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
static Future<String> getCsrf() async {
var cookies = await cookieManager.cookieJar
@ -114,7 +95,16 @@ class Request {
options.headers['x-bili-aurora-zone'] = 'sh001';
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());

View File

@ -30,7 +30,7 @@ class SettingController extends GetxController {
}
loginOut() async {
await Request.removeCookie();
await Request.cookieManager.cookieJar.deleteAll();
await Get.find<MineController>().resetUserInfo();
userLogin.value = user.get(UserBoxKey.userLogin) ?? false;
userInfoCache.put('userInfoCache', null);

View File

@ -59,16 +59,7 @@ class WebviewController extends GetxController {
'https://passport.bilibili.com/web/sso/exchange_cookie') ||
url.startsWith('https://m.bilibili.com/'))) {
try {
var cookies =
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();
await SetCookie.onSet();
var result = await UserHttp.userInfo();
UserHttp.thirdLogin();
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/utils/utils.dart';
import 'package:webview_cookie_manager/webview_cookie_manager.dart';
class SetCookie {
static onSet(List cookiesList, String url) async {
// domain url
List<Cookie> jarCookies = [];
if (cookiesList.isNotEmpty) {
for (var i in cookiesList) {
Cookie jarCookie = Cookie(i.name, i.value);
jarCookies.add(jarCookie);
}
}
String cookiePath = await Utils.getCookiePath();
PersistCookieJar cookieJar = PersistCookieJar(
ignoreExpires: true,
storage: FileStorage(cookiePath),
);
await cookieJar.saveFromResponse(Uri.parse(url), jarCookies);
// 重新设置 cookie
Request.setCookie();
Request.cookieManager.cookieJar
.saveFromResponse(Uri.parse(url), jarCookies);
return true;
static onSet() async {
var cookies = await WebviewCookieManager().getCookies(HttpString.baseUrl);
await Request.cookieManager.cookieJar
.saveFromResponse(Uri.parse(HttpString.baseUrl), cookies);
cookies = await WebviewCookieManager().getCookies(HttpString.baseApiUrl);
await Request.cookieManager.cookieJar
.saveFromResponse(Uri.parse(HttpString.baseApiUrl), cookies);
cookies = await WebviewCookieManager().getCookies(HttpString.tUrl);
await Request.cookieManager.cookieJar
.saveFromResponse(Uri.parse(HttpString.tUrl), cookies);
}
}