本文共 2739 字,大约阅读时间需要 9 分钟。
今天给大家分享Retrofit2.0 OkHttp如何自动加载Cookie; Retrofit,话说Retrofit最近真的很火啊,Retrofit+OKHttp现在似乎已经成为了Android网络请求框架的主流框架了吧,大家以前用的可能是XUtils框架,个人感觉也不错,也更新到了Xutils3,但是Retrofit是Square出的, 所以一定要学习一下。
要想获取cookie,那么肯定有个入口区提供cookie,一般都是在app应用的第一次访问时候(如登录或者登录前的验证),由服务器通过响应头来返回的,然后客户端获取到cookie后再以后的访问中加入header中进行访问。
好了,第一次请求的返回头已经有了,那么在retrofit该如何获取呢?
获取cookie
用retrofit当然得写拦截器,先贴上GetCookiesInterceptor代码用于存储cookies
private HashSet取得 cookiescookies = new HashSet<>();
public class ReceivedCookiesInterceptor implements Interceptor { @Override public okhttp3.Response intercept(Chain chain) throws IOException { okhttp3.Response originalResponse = chain.proceed(chain.request()); if (!originalResponse.headers("Set-Cookie").isEmpty()) { for (String header : originalResponse.headers("Set-Cookie")) { cookies.add(header); } } return originalResponse; } }添加 cookies
public class AddCookiesInterceptor implements Interceptor { @Override public okhttp3.Response intercept(Chain chain) throws IOException { Request.Builder builder = chain.request().newBuilder(); for (String cookie : cookies) { builder.addHeader("Cookie", cookie); Log.v("OkHttp", "Adding Header: " + cookie); // This is done so I know which headers are being added; this interceptor is used after the normal logging of OkHttp } return chain.proceed(builder.build()); } }
okhttpClient Retrofix
okHttpClient = new OkHttpClient.Builder() .addInterceptor(new AddCookiesInterceptor()) .addInterceptor(new ReceivedCookiesInterceptor()) .connectTimeout(30, TimeUnit.SECONDS).build(); //创建Retrofit对象 retrofit = new Retrofit.Builder().baseUrl(Constant.BASE_URL) //配置转化库,默认是GSON // .addConverterFactory(GsonConverterFactory.create(gson)) .addConverterFactory(GsonConverterFactory.create()) //配置回调库,采用RxJava .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .client(okHttpClient) .build();