Retrofit2.0 OkHttp如何自动加载Cookie 持久化
来源:互联网 发布:网络词flop是什么意思 编辑:程序博客网 时间:2024/05/29 16:19
今天给大家分享Retrofit2.0 OkHttp如何自动加载Cookie; Retrofit,话说Retrofit最近真的很火啊,Retrofit+OKHttp现在似乎已经成为了Android网络请求框架的主流框架了吧,大家以前用的可能是XUtils框架,个人感觉也不错,也更新到了Xutils3,但是Retrofit是Square出的, 所以一定要学习一下。
持久化Cookie
今天要讲的是,怎么持久化管理你的Cookie,也就是实现用户免登陆过程。首先说一下需求,后台大哥哥是这样告诉我的:我们的用户登录需要你在本地管理cookie,用户下次进来的时候不需要再登录,调用其他接口的时候将用户的cookie和session放到请求头里面。我果断的答应了,因为之前用Xutils的时候也这么做过,当我去网上找资料的时候发现并没有很好的资料。因为Retrofit内部是Ok来实现的,所以方向可以找到Ok管理Cookie,好了,方向找到了,我们来看一下OKHttp:
OKHttp3.0之前和之后有很大的改动:
要想获取cookie,那么肯定有个入口区提供cookie,一般都是在app应用的第一次访问时候(如登录或者登录前的验证),由服务器通过响应头来返回的,然后客户端获取到cookie后再以后的访问中加入header中进行访问。
- fiddler抓包
用工具抓包,获取接口信息,大概信息如下:
http://*****/updateToken
这个就是服务端返回的信息,cookie在响应头中,一般用浏览器抓包时,会发现访问接口的时候,在请求头中竟然会出现cookie的配置,那么它是从哪来的呢,别怕,这是因为你之前在该浏览器中已经访问过了,它做了记录,所以有了之前的cookie。解决如下:
1.删除浏览器的cookie(经测试,没有成功,估计姿势不对)
2.用手机模拟请求,并且抓包(就是用的这种)
好了,第一次请求的返回头已经有了,那么在retrofit该如何获取呢?
获取cookie
用retrofit当然得写拦截器,先贴上GetCookiesInterceptor代码
用于存储cookies
private HashSet<String> cookies = new HashSet<>();取得 cookies
public class ReceivedCookiesInterceptor implements Interceptor { @Override public okhttp3.Response intercept(Chain chain) throws IOException { okhttp3.Response originalResponse = chain.proceed(chain.request()); if (!originalResponse.headers("Set-Cookie").isEmpty()) { for (String header : originalResponse.headers("Set-Cookie")) { cookies.add(header); } } return originalResponse; } }
添加 cookies
public class AddCookiesInterceptor implements Interceptor { @Override public okhttp3.Response intercept(Chain chain) throws IOException { Request.Builder builder = chain.request().newBuilder(); for (String cookie : cookies) { builder.addHeader("Cookie", cookie); Log.v("OkHttp", "Adding Header: " + cookie); // This is done so I know which headers are being added; this interceptor is used after the normal logging of OkHttp } return chain.proceed(builder.build()); } }
okhttpClient Retrofix
okHttpClient = new OkHttpClient.Builder() .addInterceptor(new AddCookiesInterceptor()) .addInterceptor(new ReceivedCookiesInterceptor()) .connectTimeout(30, TimeUnit.SECONDS).build(); //创建Retrofit对象 retrofit = new Retrofit.Builder().baseUrl(Constant.BASE_URL) //配置转化库,默认是GSON // .addConverterFactory(GsonConverterFactory.create(gson)) .addConverterFactory(GsonConverterFactory.create()) //配置回调库,采用RxJava .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .client(okHttpClient) .build();
0 0
- Retrofit2.0 OkHttp如何自动加载Cookie 持久化
- Retrofit2.0和OkHttp如何自动加载Cookie
- okhttp cookie持久化
- OKHttp实现Cookie持久化
- OkHttp3.6.0+Retrofit2.2.0持久化cookie
- android Okhttp和OkHttp3持久化cookie
- OkHttp与Cookie及Cookie的持久化
- Retrofit+OKHttp 教你怎么持久化管理Cookie
- Retrofit+OKHttp 教你怎么持久化管理Cookie
- 使用Okhttp/Retrofit持久化cookie的简便方式
- Retrofit2.0 ,OkHttp3完美同步持久Cookie实现免登录(二)
- Android使用OkHttp携带Cookie请求数据,并对Cookie进行持久化管理
- Okhttp session持久化
- Okhttp session持久化
- okhttp2.0 cookie持久化
- Retrofit2.0 或OKHttp 日志log
- Retrofit2.0和Okhttp进行的缓存
- 网络请求篇--Retrofit2.0+RxJava+OkHttp
- 系统栏系列之背景图片侵入系统栏
- jQuery-ui插件实现百度提词器的效果,各种效果可以设置
- 关于HRESULT判断的宏(SUCCEEDED/FAILED)
- 这样一类问题总是显得特殊
- 二维数组中的查找
- Retrofit2.0 OkHttp如何自动加载Cookie 持久化
- oracle第一次使用语句创建作业失败记
- 3_Oracle_SQL语句执行过程剖析
- fcitx输入法在wps、wineqq中失灵问题的解决
- HDU 5399 Too Simple(数学 + 找规律)——2015 Multi-University Training Contest 9
- springboot学习笔记(二):基于MySql数据库的JDBC操作
- 记录java学习历程_电商管理平台项目总结
- chrome下判断点击input上标签还是其余标签
- Gym - 100204G Network Wars 网络流相关定理 附一组数据