Retrofit+OkHttp实现Cookie持久化,RxJava方式

简介: Retrofit+OkHttp实现Cookie持久化,RxJava方式

将cookie存储到本地

public class ReceivedCookiesInterceptor implements Interceptor {
    @Override
    public Response intercept(@NonNull Chain chain) throws IOException {
        Response originalResponse = chain.proceed(chain.request());
        if (!originalResponse.headers("set-cookie").isEmpty()) {
            final StringBuffer cookieBuffer = new StringBuffer();
            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(";");
                        }
                    });
            SpUtil.setString(GlobalConstant.COOKIES, cookieBuffer.toString());
        }
        return originalResponse;
    }
}

将本地的cookie追加到http请求头中

 

public class AddCookiesInterceptor implements Interceptor {
@Override
    public Response intercept(@NonNull Chain chain) throws IOException {
        final Request.Builder builder = chain.request().newBuilder();
        Observable.just(SpUtil.getString(GlobalConstant.COOKIES))
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String cookie) {
                        //添加cookie
                        builder.addHeader("cookie", cookie);
                    }
                });
        return chain.proceed(builder.build());
    }
}

OkHttp配置

OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(httpLoggingInterceptor)
                .addInterceptor(new ReceivedCookiesInterceptor())
                .addInterceptor(new AddCookiesInterceptor())
                .connectTimeout(15, TimeUnit.SECONDS)
                .build();


目录
相关文章
|
存储 Apache 容器
Cookie持久化方案——PersistentCookieStore源码解读。
客户端登陆之后一般都会在本地持有某个cookie,在退出登录时将这个cookie清理掉。如果Request的body体中持有这个cookie,服务器就会认为客户端的用户处于登录状态。反之,就会认为用户没有登录。 假设用户一直处于登录状态,如果他关闭了应用,那么他的登录状态应该保存起来。这样的话,在他下次打开应用时,他的状态还是登录状态,不需要再次登录。 如何实现呢?很简单,将有效的cookie保存起来,需要的时候拿出来,塞进请求里面就ok了。
Cookie持久化方案——PersistentCookieStore源码解读。
Retrofit实现cookie自动化管理
Retrofit实现cookie自动化管理
96 0
状态Cookie与持久化Cookie
状态Cookie与持久化Cookie和对应的实例
|
测试技术
接口测试平台代码实现121:cookie持久化-4
上节我们成功搞定了普通接口调用登陆态cookie保持会话的后台逻辑,本节我们要去搞用例库相关的逻辑。
接口测试平台代码实现121:cookie持久化-4
|
前端开发 测试技术
接口测试平台代码实现120:cookie持久化-3
接口测试平台代码实现120:cookie持久化-3
接口测试平台代码实现120:cookie持久化-3
|
前端开发 测试技术
接口测试平台代码实现119:cookie持久化-2
接口测试平台代码实现119:cookie持久化-2
接口测试平台代码实现119:cookie持久化-2
|
前端开发 测试技术
接口测试平台代码实现118:登陆态cookie持久化
我们在之前的章节中,成功搞定了登陆态的相关功能,但是我们之前设计的登陆态接口,其本质是提取返回值的特殊字段,然后插入到其他接口的url/header/body中。
|
存储 Web App开发 Java
|
Android开发 Apache 存储
Retrofit+OKHttp 教你怎么持久化管理Cookie
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/51345386 绪论 最近小编有点忙啊,项目比较紧,所以一直在忙活项目,继之前的自定义组件之后就没再写博客了,如果你没看到之前的自定义组件你可以看一下: Android自定义下拉刷新动画–仿百度外卖下拉刷新 Android自定义组合控件—教你如何自定义下拉刷新和左滑删除 效果还行,源码也已经传到我的Github上了。
1234 0
|
Web App开发 存储 Java
android cookie持久化
原博客地址:http://blog.csdn.net/shimiso/article/details/39033353 在解析网页信息的时候,需要登录后才能访问,所以使用httpclient模拟登录,然后把cookie保存下来,以供下一次访问使用,这时就需要持久化cookie中的内容。 在之前先科普一下基础知识: 什么是Cookies?
1942 0