关闭

Retrofit 自定义Cookies

标签: Cookiesinterceptor
4014人阅读 评论(0) 收藏 举报
分类:

自定义Cookies拦截器:

public class CookiesInterceptor implements Interceptor{
    private Context context;

    public CookiesInterceptor(Context context) {
        this.context = context;
    }
    //重写拦截方法,处理自定义的Cookies信息
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        Request compressedRequest = request.newBuilder()
                .header("cookie", CookieUtil.getCookies(context))
                .build();
        Response response = chain.proceed(compressedRequest);
        CookieUtil.saveCookies(response.headers(), context);
        return response;
    }
}

CookieUtil则是一些自定义解析和生成方法以及SharedPreferences的存取,代码略
使用:

//设置拦截器,以用于自定义Cookies的设置
                mOkHttpClient.networkInterceptors()
                            .add(new CookiesInterceptor(context));

详细设置:

public abstract class BaseApi {
    public static final String API_SERVER = "服务器地址"
    private static final OkHttpClient mOkHttpClient = new OkHttpClient();
    private static Retrofit mRetrofit;

    protected static Retrofit getRetrofit() {
            if (Retrofit == null) {
                Context context = Application.getInstance().getApplicationContext();
                //设定30秒超时
                mOkHttpClient.setConnectTimeout(30, TimeUnit.SECONDS);
                //设置拦截器,以用于自定义Cookies的设置
                mOkHttpClient.networkInterceptors()
                            .add(new CookiesInterceptor(context));
                //设置缓存目录
                File cacheDirectory = new File(context.getCacheDir()
                                        .getAbsolutePath(), "HttpCache");
                Cache cache = new Cache(cacheDirectory, 20 * 1024 * 1024);
                mOkHttpClient.setCache(cache);
                //构建Retrofit
                mRetrofit = new Retrofit.Builder()
                        //配置服务器路径
                        .baseUrl(API_SERVER + "/")  
                        //设置日期解析格式,这样可以直接解析Date类型
                        .setDateFormat("yyyy-MM-dd HH:mm:ss")  
                        //配置转化库,默认是Gson
                        .addConverterFactory(ResponseConverterFactory.create())
                        //配置回调库,采用RxJava
                        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                        //设置OKHttpClient为网络客户端
                        .client(mOkHttpClient)
                        .build();
            }
            return mRetrofit;
        }
}
0
3
查看评论

Retrofit+OKHttp 教你怎么持久化管理Cookie

绪论最近小编有点忙啊,项目比较紧,所以一直在忙活项目,继之前的自定义组件之后就没再写博客了,如果你没看到之前的自定义组件你可以看一下: Android自定义下拉刷新动画–仿百度外卖下拉刷新 Android自定义组合控件—教你如何自定义下拉刷新和左滑删除 效果还行,源码也已经传到我的Github...
  • lyhhj
  • lyhhj
  • 2016-05-08 13:46
  • 26736

Retrofit在客户端保持Cookie(服务器的Token验证)

移动端项目和网站还是多多少少的区别的,拿这个用户登陆过期验证这个流程来说吧,一般的网站是不会做处理的,他们访问的时候会自动验证Cookie的有效期的,移动端这样处理就不行的,他是不会保存Cookie的,所以我们在做项目的时候,一般来说,服务器的哥们都会在登陆成功之后给你返回一个叫做Token的东西,...
  • u014752325
  • u014752325
  • 2016-12-10 14:24
  • 5566

Retrofit实现持久化Cookie的三种方案

在上一文中,我们提到retrofit 2.0中如何实现非持久化cookie的两种方案,但并未做过深的解释。 现在我们重点关注JavaNetCookieJar实现非持久化cookie背后的原理,最终找出实现Cookie持久化的三种方案。
  • dd864140130
  • dd864140130
  • 2016-09-17 00:13
  • 6541

Retrofit——Cookie

今天学习了有关http的cookie知识后,刚好想结合retrofit来试验一下学习成果,于是拿了别人的接口来做实验。要想获取cookie,那么肯定有个入口区提供cookie,一般都是在app应用的第一次访问时候(如登录或者登录前的验证),由服务器通过响应头来返回的,然后客户端获取到cookie后再...
  • qqyanjiang
  • qqyanjiang
  • 2016-04-27 20:40
  • 5128

使用Okhttp/Retrofit持久化cookie的简便方式

首先cookie是什么就不多说了,还是不知道的话推荐看看这篇文章 Cookie/Session机制详解 深入解析Cookie技术为什么要持久化cookie也不多说了,你能看到这篇文章代表你有这个需求。cookie简单来说就是服务器在客户端中保存的键值对,比如说早期的购物车,保持登陆状态都是使用的...
  • u010386612
  • u010386612
  • 2016-08-16 00:35
  • 6218

Retrofit2 Cookie管理-按声明决定是否带Cookie请求接口

Retrofit关于cookie缓存与使用的文章已经很多了,无论是使用CookieJar还是在OkHttpClient build的时候通过Interceptor设置header,但是在项目中有针对接口决定是否在请求中带cookie的需求,本文主要分享通过注解的方式决定具体接口在请求时是否传入Coo...
  • u011734444
  • u011734444
  • 2017-01-03 11:38
  • 1519

Retrofit 最简单的快速入门及自己封装

简单介绍及官方文档的坑 官方文档 http://square.github.io/retrofit/ Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHtt...
  • zhiyuan0932
  • zhiyuan0932
  • 2017-01-10 23:22
  • 18184

如何在Retrofit请求里添加Cookie

你可以自定义一个RequestIntercaptor:String cookieKey = ... String cookieValue = ...RestAdapter adapter = new RestAdapter.Builder() .setRequestInterceptor(n...
  • u014134488
  • u014134488
  • 2016-05-31 16:26
  • 2386

retrofit/okhttp添加拦截器公共参数签名,添加cookie,打印响应返回

retrofit 基于okhttp。使用retrofit /okhttp时候,这些都会wifi 直连的,不走系统的wifi设置,代理是抓不到包的。所以如果 想抓包那么抓网卡吧,打印请求或者添加公共参数或者签名之类的话,可以使用拦截器来添加。拦截器这里使用okhttp的应用拦截器,分别对get p...
  • spinchao
  • spinchao
  • 2016-10-26 10:43
  • 4004

Retrofit 中设置 OkHttp 拦截器,保存和添加 Cookie

整理一下 Retrofit 使用过程中给 OkHttp设置拦截器,并且在请求体中添加用户登录生成的 Cookie 来确认当前用户。之前设置拦截器一般是用来添加公共的请求头,要求比较单一,只需要加进去就行了。后来,因为项目需要先获取登录 Cookie , 然后再给每一个请求加入 Cookie 信息,这...
  • lv_fq
  • lv_fq
  • 2017-08-13 00:37
  • 1381
    个人资料
    • 访问:11117511次
    • 积分:77498
    • 等级:
    • 排名:第24名
    • 原创:506篇
    • 转载:912篇
    • 译文:4篇
    • 评论:2264条
    打赏
    如果您认为本博客不错,读后觉得有收获,不妨打赏赞助我一下,让我有动力继续写出高质量的博客。



    赠人玫瑰,手有余香。分享技术,传递快乐。

    有心课堂,传递的不仅仅是技术!

    QQ交流群:250468947

    有心课堂会员,请加入VIP QQ交流群:213725333

    github
    我的视频
    博客专栏
    最新评论