OkHttp3.6.0+Retrofit2.2.0持久化cookie

本文介绍了如何在应用程序中配置Cookie信息,包括保存从服务器接收到的Cookie和在后续请求中添加已保存的Cookie。通过两个拦截器实现了Cookie的管理和使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

配置cookie信息:

1 保存cookie信息(一般在登录app之后保存cookie信息):

/**
 * Created by zhang on 2017/4/14 09 : 57.
 */
public class ReceivedCookiesInterceptor implements Interceptor {

@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();
        Disposable subscribe =    Observable.fromIterable
        (originalResponse.headers("Set-Cookie"))
                .map(new Function<String, String>() {
                    @Override
                    public String apply(@NonNull String list)
                     throws Exception {
                        String[] split = list.split(";");
                        return split[0];
                    }
                }).subscribe(new Consumer<String>() {
                    @Override
                    public void accept(@NonNull String cookie) 
                    throws Exception {
                        if (!TextUtils.isEmpty(cookie)) {
                            cookieBuffer.append(cookie).append(";");
                        }
                    }
                });
        //path和domain是固定信息,一般不变,可根据你的项目而定,以下仅供参考
        cookieBuffer.append("path=/;");
        cookieBuffer.append("domain=.api.app.com");
        SharedPrefUtil.saveSharedPrfString("cookie", cookieBuffer.toString());
        subscribe.dispose();
    }
    return originalResponse;
}
}

2 添加cookie信息(携带cookie信息请求服务器数据):

/**
 * Created by zhang on 2017/4/14 09 : 58.
 */
public class AddCookiesInterceptor implements Interceptor {

@Override
public Response intercept(Chain chain) throws IOException {
    final Request.Builder builder = chain.request().newBuilder();
    Observable.just(SharedPrefUtil.getSharedPrfString("cookie", ""))
            .subscribe(new Consumer<String>() {
                @Override
                public void accept(@NonNull String cookie) throws Exception {
                    //添加cookie
                    builder.addHeader("Cookie", cookie);
                }
            });
    return chain.proceed(builder.build());
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值