flutter开发实战-请求dio设置Cookie
在最近开发中碰到了需要websocket长链接收到响应的auth,在之后的请求中需要将其设置为cookie中。
如Cookie:auth=DHSfQQSAXf89xZqJTLdEDVI2hwzc7p2lUmSNNdUSlgW2MyfQIN+pYr7jUbkX/;
设置cookie用到了dio_cookie_manager组件
一、引入dio_cookie_manager
在pubspec.yaml引入dio_cookie_manager
dio_cookie_manager: ^2.0.0 # latest version
二、使用dio_cookie_manager
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组件。文章来源:https://www.toymoban.com/news/detail-613476.html
学习记录,每天不停进步。文章来源地址https://www.toymoban.com/news/detail-613476.html
到了这里,关于flutter开发实战-请求dio设置Cookie的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!