关闭

Retrofit使用OkHttp保存和添加cookie

标签: cookieRetrofit
5970人阅读 评论(8) 收藏 举报
分类:

Retrofit的cookie的保存和添加都可以用Interceptor来实现
下面是接收请求中返回并保存cookie的代码示例:

public class ReceivedCookiesInterceptor implements Interceptor {
    private Context context;

    public ReceivedCookiesInterceptor(Context context) {
        super();
        this.context = context;

    }

    @Override
    public Response intercept(Chain chain) throws IOException {

        Response originalResponse = chain.proceed(chain.request());
        //这里获取请求返回的cookie
        if (!originalResponse.headers("Set-Cookie").isEmpty()) {
            final StringBuffer cookieBuffer = new StringBuffer();
            //最近在学习RxJava,这里用了RxJava的相关API大家可以忽略,用自己逻辑实现即可.大家可以用别的方法保存cookie数据
            Observable.from(originalResponse.headers("Set-Cookie"))
                    .map(new Func1<String, String>() {
                        @Override
                        public String call(String s) {
                            String[] cookieArray = s.split(";");
                            return cookieArray[0];
                        }
                    })
                    .subscribe(new Action1<String>() {
                        @Override
                        public void call(String cookie) {
                            cookieBuffer.append(cookie).append(";");
                        }
                    });
            SharedPreferences sharedPreferences = context.getSharedPreferences("cookie", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putString("cookie", cookieBuffer.toString());
            editor.commit();
        }

        return originalResponse;
    }

向请求中添加cookie,代码如下:

public class AddCookiesInterceptor implements Interceptor {
    private Context context;

    public AddCookiesInterceptor(Context context) {
        super();
        this.context = context;

    }

    @Override
    public Response intercept(Chain chain) throws IOException {

        final Request.Builder builder = chain.request().newBuilder();
        SharedPreferences sharedPreferences = context.getSharedPreferences("cookie", Context.MODE_PRIVATE);
//最近在学习RxJava,这里用了RxJava的相关API大家可以忽略,用自己逻辑实现即可  
                Observable.just(sharedPreferences.getString("cookie", ""))
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String cookie) {
                        //添加cookie
                        builder.addHeader("Cookie", cookie);
                    }
                });
        return chain.proceed(builder.build());
    }
}

在Retrofit做如下设置即可在每次请求中保存和添加cookie:
本人使用的Retrofit2.0可能Retrofit1.9中代码略有不同,但这个思路应该也可以用在1.9版本中,希望对大家有所帮助

   public static OkHttpClient getClient(Context context) {
        OkHttpClient client = getUnsafeOkHttpClient();
        client.interceptors().add(new ReceivedCookiesInterceptor(context));
        client.interceptors().add(new AddCookiesInterceptor(context));

        return client;
    }
4
3
查看评论

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

整理一下 Retrofit 使用过程中给 OkHttp设置拦截器,并且在请求体中添加用户登录生成的 Cookie 来确认当前用户。之前设置拦截器一般是用来添加公共的请求头,要求比较单一,只需要加进去就行了。后来,因为项目需要先获取登录 Cookie , 然后再给每一个请求加入 Cookie 信息,这...
  • lv_fq
  • lv_fq
  • 2017-08-13 00:37
  • 1385

Retrofit2.0 ,OkHttp3完美同步持久Cookie实现免登录(二)

通过对Retrofit2.0的<Retrofit 2.0 超能实践,完美支持Https传输>基础入门和案例实践,掌握了怎么样使用Retrofit访问网络,加入自定义header,包括加入SSL证书,基本的调试基础,但是正常的开发中会涉及cookie同步问题,可以实现一些自动或免登录登陆问...
  • sk719887916
  • sk719887916
  • 2016-06-17 16:00
  • 18531

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

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

使用OKHttp模拟登陆知乎,兼谈OKHttp中Cookie的使用!

本文主要是想和大家探讨技术,让大家学会Cookie的使用,切勿做违法之事!很多Android初学者在刚开始学习的时候,或多或少都想自己搞个应用出来,把自己学的十八般武艺全都用在这个APP上,其实这个想法很好,项目驱动学习,效率更高,这是大学老师教给我的。可是一个APP,如果纯粹搞成一个本地应用,会变...
  • u012702547
  • u012702547
  • 2016-08-09 20:32
  • 15721

OkHttp3简单的使用说明和Cookie自动化管理管理

OkHttp3是Java和Android都能用并且进行了个种功能的封装 引入 compile 'com.squareup.okhttp3:okhttp:3.6.0' 初始化 mOkHttpClient = new OkHttpClient.Builder(...
  • dmz1989
  • dmz1989
  • 2017-06-07 20:54
  • 734

Android OkHttp的Cookie自动化管理

Android中在使用OkHttp这个库的时候,有时候需要持久化Cookie,那么怎么实现呢。OkHttp的内部源码过于复杂,不进行深究,这里只看其中的HttpEngineer里面的部分源码,在发起请求以及请求结束都会调用这个类的几个方法。我们先看networkRequest方法,在里面通过clie...
  • sbsujjbcy
  • sbsujjbcy
  • 2015-07-15 16:23
  • 18093

Retrofit2.0和OkHttp如何自动加载Cookie

原文:http://tsuharesu.com/handling-cookies-with-okhttp/ public class AddCookiesInterceptor implements Interceptor { @Override public Res...
  • qq_25719349
  • qq_25719349
  • 2015-12-29 12:05
  • 1396

okhttp3带cookie请求

服务器使用shiro做登录校验及权限验证的时候 app端访问时就要带上cookie,不然请求会提示未登录 private void postAsynHttp() { mOkHttpClient=new OkHttpClient.Builder() ...
  • shengfakun1234
  • shengfakun1234
  • 2017-01-19 14:14
  • 5077

Android OkHttp完全解析 是时候来了解OkHttp了

转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/47911083; 本文出自:【张鸿洋的博客】 一、概述 最近在群里听到各种讨论okhttp的话题,可见okhttp的口碑相当好了。再加上Google貌似在6....
  • lmj623565791
  • lmj623565791
  • 2015-08-24 15:36
  • 613359

Android Retrofit2&OkHttp3添加统一的请求头Header

在使用Retrofit时,有时候需要设置Set-Cookie等请求头,如果每一个url都需要,那么直接来个拦截器就好了。如下图所示:注意Header头,不要照抄,要灵活运用。让所有网络请求都附上你的 token:Interceptor mTokenInterceptor = new Intercep...
  • jdsjlzx
  • jdsjlzx
  • 2016-06-03 13:36
  • 46370
    个人资料
    • 访问:94220次
    • 积分:1603
    • 等级:
    • 排名:千里之外
    • 原创:60篇
    • 转载:1篇
    • 译文:0篇
    • 评论:30条
    文章分类
    最新评论