flutter开发实战-请求dio设置Cookie

flutter开发实战-请求dio设置Cookie

在最近开发中碰到了需要websocket长链接收到响应的auth,在之后的请求中需要将其设置为cookie中。

如Cookie:auth=DHSfQQSAXf89xZqJTLdEDVI2hwzc7p2lUmSNNdUSlgW2MyfQIN+pYr7jUbkX/;

设置cookie用到了dio_cookie_manager组件

在pubspec.yaml引入dio_cookie_manager

复制代码
dio_cookie_manager: ^2.0.0 # latest version

2.1 使用CookieJar

复制代码
import 'package:cookie_jar/cookie_jar.dart';
import 'package:dio/dio.dart';
import 'package:dio_cookie_manager/dio_cookie_manager.dart';

void main() async {
  final dio = Dio();
  final cookieJar = CookieJar();
  dio.interceptors.add(CookieManager(cookieJar));
  // First request, and save cookies (CookieManager do it).
  await dio.get("https://dart.dev");
  // Print cookies
  print(await cookieJar.loadForRequest(Uri.parse("https://dart.dev")));
  // Second request with the cookies
  await dio.get('https://dart.dev');
}

CookieManager拦截器可以帮助我们自动管理请求/响应Cookie。

如果需要持久保存cookie,需要用到PersistCookieJar

复制代码
dio.interceptors.add(CookieManager(PersistCookieJar()))

2.1 使用PersistCookieJar

PersistCookieJar将cooke持久化保存。

在flutter中,传递给PersistCookieJar的路径必须有效(存在于具有写访问权限的手机中)。使用path_provider包可以获得正确的路径。

复制代码
Future<void> prepareJar() async {
  final Directory appDocDir = await getApplicationDocumentsDirectory();
  final String appDocPath = appDocDir.path;
  final jar = PersistCookieJar(
    ignoreExpires: true,
    storage: FileStorage(appDocPath + "/.cookies/"),
  );
  dio.interceptors.add(CookieManager(jar));
}
)

2.2 使用重定向请求处理Cookie

使用重定向请求处理Cookie重定向请求需要额外的配置才能正确解析cookie。需要将followRedirects设置为false。

允许Htto状态代码从300到399个预测为成功的响应。

使用HttpHeaders.locationHeader进行进一步请求。

复制代码
final cookieJar = CookieJar();
final dio = Dio()
  ..interceptors.add(CookieManager(cookieJar))
  ..options.followRedirects = false
  ..options.validateStatus =
      (status) => status != null && status >= 200 && status < 400;
final redirected = await dio.get('/redirection');
final response = await dio.get(
  redirected.headers.value(HttpHeaders.locationHeader)!,
);

2.2 将获取到的Auth设置到cookie中

将从长链接中获取到的Auth设置到cookie中

复制代码
 Future<void> setSaveCookie({
    required String name,
    required String value,
  }) async {
    Cookie cookie = Cookie(name, value);
    List<Cookie> cookies = [cookie];
    //Save cookies
    await jar.saveFromResponse(
        Uri.parse('https://ifour.cn'), cookies);
  }

调用setSaveCookie

复制代码
	// 收到消息,将cookie写入dio中
        String auth = "auth";
        String authValue = "${messageDo.data?.auth}";
        await SDHttp.getInstance().setSaveCookie(name: auth, value: authValue);

三、小结

flutter开发实战-请求dio设置Cookie。设置cookie用到了dio_cookie_manager组件。

学习记录,每天不停进步。

相关推荐
2501_944424121 小时前
Flutter for OpenHarmony游戏集合App实战之贪吃蛇食物生成
android·开发语言·flutter·游戏·harmonyos
不会写代码0001 小时前
Flutter 框架跨平台鸿蒙开发 - 全国景区门票查询应用开发教程
flutter·华为·harmonyos
kirk_wang2 小时前
Flutter艺术探索-Riverpod深度解析:新一代状态管理方案
flutter·移动开发·flutter教程·移动开发教程
猛扇赵四那边好嘴.2 小时前
Flutter 框架跨平台鸿蒙开发 - 旅行规划助手应用开发教程
flutter·华为·harmonyos
2501_937145414 小时前
神马影视8.8版2026最新版:核心技术升级与多场景适配解析
android·源码·电视盒子·源代码管理
2501_944424125 小时前
Flutter for OpenHarmony游戏集合App实战之俄罗斯方块七种形状
android·开发语言·flutter·游戏·harmonyos
CheungChunChiu6 小时前
Flutter 在嵌入式开发的策略与生态
linux·flutter·opengl
不会Android的潘潘7 小时前
受限系统环境下的 WebView 能力演进:车载平台 Web 渲染异常的根因分析与优化实践
android·java·前端·aosp
建军啊7 小时前
java web常见lou洞
android·java·前端
豆奶dudu7 小时前
安卓应用签名生成+微信开放平台安卓应用签名
android·微信开放平台