Retrofit使用OkHttp保存和添加cookie

原创 2016年01月03日 22:04:01

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;
    }
版权声明:若有错误,望大家及时指正

相关文章推荐

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

首先cookie是什么就不多说了,还是不知道的话推荐看看这篇文章 Cookie/Session机制详解 深入解析Cookie技术为什么要持久化cookie也不多说了,你能看到这篇文章代表你有这个需...

集成融云Android SDK实现在群聊/讨论组中@人的功能(二)

接着上面写2.写了单独service来处理@相关数据public class AtUserService { private static AtUserService instance; ...

Android OkHttp的Cookie自动化管理

Android中在使用OkHttp这个库的时候,有时候需要持久化Cookie,那么怎么实现呢。OkHttp的内部源码过于复杂,不进行深究,这里只看其中的HttpEngineer里面的部分源码,在发起请...

cookie存储数据(使用okhttp框架)

cookie存储数据(使用okhttp框架)

OkHttp使用详解一

概要本篇主要讲解OkHttp最基本的使用,如最常见的get和post请求,在本文中post主要介绍的是表单提交方式的请求,文章最后介绍了如何在服务端和客户端设置处理Cookie,客户端给出了两种最常见...

解决OKHttp不能自动缓存header cookies 里的 sessionid

由于app要实现登录缓存功能,但惊讶的发现不经过设置okHttp是不会自动管理header的.官网的文档也是醉了,找了半天没看懂怎么搞.其实实现自动管理cookie很简单很简单,在OkHttp的bui...

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

OkHttp3是Java和Android都能用并且进行了个种功能的封装 引入 compile 'com.squareup.okhttp3:okhttp:3.6.0' 初始化 ...

Android使用OkHttp携带Cookie请求数据,并对Cookie进行持久化管理

1.在Application中初始化okhttp. OkHttpUtil.initOkHttp(this); 2.设置cookieJar参数 public static void i...

android Okhttp和OkHttp3持久化cookie

对于Okhttp和Okhttp3分别有两种方法持久化cookie Okhttp持久化我们可以CookieManager来持久化,我们需要手动创建PersistentCookieStore类实现Cook...

okhttp3带cookie请求

服务器使用shiro做登录校验及权限验证的时候 app端访问时就要带上cookie,不然请求会提示未登录 private void postAsynHttp() { mOkHttp...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)