发布网友 发布时间:2022-10-12 20:23
共1个回答
热心网友 时间:2023-10-24 20:45
相关文章
1、 OkHttp3入门介绍:https://www.jianshu.com/p/af144d662bfd
2、 OkHttp3入门介绍之Cookie持久化:https://www.jianshu.com/p/23b35d403148
本章主要从以下几个方面介绍:
1、OkHttp3 Cookie内置管理机制介绍
2、基于本地存储的Cookie管理
3、基于内存存储的Cookie管理
4、总结
OkHttp提供了用于管理Cookie的接口 CookieJar ,看一下接口的内部结构:
从上面可以看出, CookieJar 接口提供了 saveFromResponse 、 loadForRequest 两个方法,还有一个内部类默认实现 NO_COOKIES 。
1) saveFromResponse 方法:当网络请求返回结果后,内部会解析Header并获取cookie相关信息,同时回调该方法,此处可以缓存或者持久化cookie,下面看一下调用源码:
2) loadForRequest 方法:当网络请求时,okhttp会通过该方法,获取对应cookie,下面看一下调用源码:
3)如果开发者在初始化 OkHtpClient 时没有自定义CookieJar,默认不会进行cookie操作,看一下 OkHttpClient 的构造器实现;
这里我仿照 android-async-http 的Cookie管理机制 PersistentCookieStore 进行改造;
实现逻辑
1、定义用于管理Cookie的接口 CookieStore ;
2、定义 CookieJarImpl 类实现 CookieJar 接口,然后用 CookieStore 去接管 saveFromResponse 、 loadForRequest 这两个方法;
3、定义 PersistentCookieStore 类实现 CookieStore 接口,用于管理Cookie;
4、将 PersistentCookieStore 对象设置到 OkHttpClient 中;
具体实现
1、定义 CookieStore 接口:
2、定义 CookieJarImpl 类实现 CookieJar 接口,然后用 CookieStore 去接管 saveFromResponse 、 loadForRequest 这两个方法:
3、定义 PersistentCookieStore 类实现 CookieStore 接口,用于管理Cookie;
(注:这里仿照android-async-http库里的 PersistentCookieStore 实现)
这里面用到了 SerializableCookie ,主要用于序列表cookie对象到对象流中:
4、将 PersistentCookieStore 对象设置到 OkHttpClient 中;
实现逻辑跟 PersistentCookieStore 类似,只是对于Cookie的存储放在了Map中。
今天的主要就是介绍了Cookie的管理,就是从 CookieJar 接口的两个方法入手,然后做了进一步的封装处理, PersistentCookieStore 和 MemoryCookieStore 这两个类的逻辑实现基本一致,喜欢动手的小伙伴完全可以进一步抽象一下。