通过对Retrofit2.0的Retrofit 2.0 超能实践(一),完美支持加密Https传输基础入门和案例实践,掌握了怎么样使用Retrofit访问网络,加入自定义header,包括加入SSL证书,基本的调试基础,但是正常的开发中会涉及cookie同步问题,可以实现一些自动或免登录登陆问题,接下来进入cookie同步姿势
Cookie
Cookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术。Cookies是当你浏览某网站时,由Web服务器置于你硬盘上的一个非常小的文本文件,它可以记录你的用户ID、密码、浏览过的网页、停留的时间等信息。当你再次来到该网站时,网站通过读取Cookies,得知你的相关信息,就可以做出相应的动作,如在页面显示欢迎你的标语,或者让你不用输入ID、密码就直接登录等等。
从本质上讲,它可以看作是你的身份证。但Cookies不能作为代码执行,也不会传送病毒,且为你所专有,并只能由提供它的服务器来读取。保存的信息片断以“名/值”对(name-value pairs)的形式储存,一个“名/值”对仅仅是一条命名的数据。一个网站只能取得它放在你的电脑中的信息,它无法从其它的Cookies文件中取得信息,也无法得到你的电脑上的其它任何东西。
Cookies中的内容大多数经过了加密处理,因此一般用户看来只是一些毫无意义的字母数字组合,只有服务器的CGI处理程序才知道它们真正的含义。
Cookie也是http的会话跟踪技术,也包含web端的session
。cookie
的作用就是为了解决HTTP协议无状态的缺陷所作的努力.
#方式一:
自定义cookie
HttpClient中大家都知道加入cookie的方式
|
|
因此Retrofit中需自我实现一个PersistentCookieStore 用来储存OkHttpCookies。
-PersistentCookieStore
|
|
- OkHttpCookies
需要实现序列化的 OkHttpCookies 用来持久OkHttpCookies
|
|
-自定义CookieManger
实现有一个自定义的CookieManger来管理cookies,实现以K-V结构获取set,getCookier
|
|
- Retrofit加入cookie
|
|
总结
实现加入cookies持久,实现免登陆基本步骤;
1 实现可序列化的OkHttpcookies
2 实现储存OkHttpcookies的PersistentCookieStore
3 实现cookies管理工具CookieManger
4 构建OKHttpClient
5 Retrofit加入自定义的okHttpClient
6直接调用RetrofitClient
方式二
方法一可能对某些网站不兼容,可以借助retfoit的拦截器实现
用来加入cookie
|
|
public class SaveCookiesInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Response originalResponse = chain.proceed(chain.request());
if (!originalResponse.headers("Set-Cookie").isEmpty()) {
HashSet<String> cookies = new HashSet<>();
for (String header : originalResponse.headers("Set-Cookie")) {
cookies.add(header);
}
Preferences.getDefaultPreferences().edit()
.putStringSet(Preferences.PREF_COOKIES, cookies)
.apply();
}
return originalResponse;
}
}
|
|
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.interceptors().add(new ReadCookiesInterceptor());
okHttpClient.interceptors().add(new SaveCookiesInterceptor());
|
|
Retrofit retrofit = new Retrofit.Builder()
.client(okHttpClient)
.build();
```
so iz 或许下一步你将会Retrofit遇到文件和图片上传问题,别急会 干货即将来临!
Retrofit 2.0系列请阅读
- Novate网络库:Retrofit2.0和RxJava1.x的又一次完美封装。
- Retrofit 2.0 超能实践(九)Rxjava结合Retrofit,如何优雅的取消请求!
- Retrofit 2.0 超能实践(八)源码解析,玩转IOC和AOP, 徒手实现属于你的Retrofit框架
- Retrofit 2.0 超能实践(七)Rxjava +Retrofit 你需要掌握的几个经典技巧
- Retrofit 2.0 超能实践(六)基于Retrofit2.0+RxJava 封装的超好用的RetrofitClient工具类
- Retrofit 2.0 超能实践(五),动态Okhttp对Request统一添加header和Parameter
- Retrofit 2.0 超能实践(四),实现大文件多线程断点下载
- Retrofit 2.0 超能实践(三),轻松实现多文件/图片/Json字符串/表单提交上传
- Retrofit 2.0 超能实践(二),Okhttp完美同步持久Cookie实现免登录
- Retrofit 2.0 超能实践(一),完美支持加密Https传输