package com.c03.jy.wanandroid.playandroid.data.source.remote.retrofit.intercept;
import android.text.TextUtils;
import com.c03.jy.wanandroid.playandroid.MyApplication;
import com.c03.jy.wanandroid.playandroid.data.AppConstact;
import com.c03.jy.wanandroid.playandroid.utils.SharePreferenceUtils;
import java.io.IOException;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
public class AddHeaderInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
String domain = request.url().host();
String requestUrl = request.url().toString();
Request.Builder builder = request.newBuilder();
if(requestUrl.contains(AppConstact.COLLECTIONS_WEBSITE) || requestUrl.contains(AppConstact.ARTICLE_WEBSITE)
||requestUrl.contains(AppConstact.TODO_WEBSITE) || requestUrl.contains(AppConstact.UNCOLLECTIONS_WEBSITE)){
String cookies = SharePreferenceUtils.getFromGlobalSpw(MyApplication.context, domain,"" );
if(!TextUtils.isEmpty(cookies)){
builder.addHeader(AppConstact.COOKIE_NAME, cookies);
}
}
return chain.proceed(builder.build());
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
package com.c03.jy.wanandroid.playandroid.data.source.remote.retrofit.intercept;
import android.text.TextUtils;
import android.util.Log;
import com.c03.jy.wanandroid.playandroid.MyApplication;
import com.c03.jy.wanandroid.playandroid.data.AppConstact;
import com.c03.jy.wanandroid.playandroid.utils.SharePreferenceUtils;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
public class SaveCookieInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
String domain = request.url().host();
String requestUrl = request.url().toString();
// 如果 response 的header 中包含 cookie 信息。并且此次请求是登录或者注册
if(!TextUtils.isEmpty(response.header(AppConstact.SET_COOKIE_KEY))
&& (requestUrl.contains(AppConstact.SAVE_USER_LOGIN_KEY)
|| requestUrl.contains(AppConstact.SAVE_USER_REGISTER_KEY))){
// 从header 中取出cookie,取出的事一个list。
List<String> cookies = response.headers(AppConstact.SET_COOKIE_KEY);
if(cookies.size() > 0){
HashSet<String> cookieSet = new HashSet<>();
for(String cooke : cookies){
for(String value : cooke.split(";")){
if(!TextUtils.isEmpty(value)){
cookieSet.add(value);
}
}
}
StringBuilder sb = new StringBuilder();
for (String aCookieSet : cookieSet) {
sb.append(aCookieSet);
sb.append(";");
}
sb.deleteCharAt(sb.length()-1);
SharePreferenceUtils.saveToGlobalSpw(MyApplication.context,domain,sb.toString());
}
}
return response;
}
}
…用法…
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)
.addInterceptor(new AddHeaderInterceptor())
.addInterceptor(new SaveCookieInterceptor())
.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
.readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
.build();