在使用Retrofit时,有时候需要设置Set-Cookie等请求头,如果每一个url都需要,那么直接来个拦截器就好了。

官方说明:

  • OkHttp3下OkHttpClient的 List< Interceptor> interceptors()方法,返回的是一个不可编辑的列表,如果对其进行编辑会报出UnSupportedOperationException
  • Interceptor的典型使用场景,就是对request和response的Headers进行编辑

如下图所示:

注意Header头,不要照抄,要灵活运用。

让所有网络请求都附上你的 token:

Interceptor mTokenInterceptor = new Interceptor() {    @Override public Response intercept(Chain chain) throws IOException {        Request originalRequest = chain.request();        if (Your.sToken == null || alreadyHasAuthorizationHeader(originalRequest)) {            return chain.proceed(originalRequest);        }        Request authorised = originalRequest.newBuilder()            .header("Authorization", Your.sToken)            .build();        return chain.proceed(authorised);    }};

为OkHttpClient 添加两个以上的拦截器,如下代码所示:

public class RestDataSource implements Repository {    private final MarvelService mMarvelService;    @Inject    public RestDataSource() {        // Log信息        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);        // 公私密匙        MarvelSigningInterceptor signingInterceptor = new MarvelSigningInterceptor(                BuildConfig.MARVEL_PUBLIC_KEY, BuildConfig.MARVEL_PRIVATE_KEY);        // OkHttp3.0的使用方式        OkHttpClient client = new OkHttpClient.Builder()                .addInterceptor(signingInterceptor)                .addInterceptor(loggingInterceptor)                .build();        // 选择人物信息        Gson customGsonInstance = new GsonBuilder()                .registerTypeAdapter(new TypeToken<List<AvengersCharacter>>() {                        }.getType(),                        new MarvelResultsDeserializer<AvengersCharacter>())                .create();        // 适配器        Retrofit marvelApiAdapter = new Retrofit.Builder()                .baseUrl(MarvelService.END_POINT)                .addConverterFactory(GsonConverterFactory.create(customGsonInstance))                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                .client(client)                .build();        // 服务        mMarvelService = marvelApiAdapter.create(MarvelService.class);    }    // 返回人物信息    @Override    public Observable<List<AvengersCharacter>> getCharacters(int currentOffset) {        return mMarvelService.getCharacters(currentOffset);    }}

下面来个完整的配置:

import okhttp3.Interceptor;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;import retrofit2.Retrofit;public class RetrofitAPIManager {    public static final String SERVER_URL = "url";    public static ClientAPI provideClientApi() {        Retrofit retrofit = new Retrofit.Builder()                .baseUrl(SERVER_URL)                .client(genericClient())                .build();        return retrofit.create(ClientAPI.class);    }    public static OkHttpClient genericClient() {        OkHttpClient httpClient = new OkHttpClient.Builder()                .addInterceptor(new Interceptor() {                    @Override                    public Response intercept(Chain chain) throws IOException {                        Request request = chain.request()                                .newBuilder()                                .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")                                .addHeader("Accept-Encoding", "gzip, deflate")                                .addHeader("Connection", "keep-alive")                                .addHeader("Accept", "*/*")                                .addHeader("Cookie", "add cookies here")                                .build();                        return chain.proceed(request);                    }                })                .build();        return httpClient;    }}

更多相关文章

  1. Android发送信息模拟系统
  2. Android网络架构之———OkHttp+Volley+Gson
  3. API Demos 2.2 研读笔记(9)——通过调用子Activity返回值
  4. 利用Xposed Hook打印Java函数调用堆栈信息的几种方法
  5. android 权限库EasyPermissions
  6. 2013.09.04——— android Location 过滤最佳的位置
  7. IONIC ANDROID 开发环境搭建
  8. 详解Android提交数据到服务器的两种方式四种方法
  9. Facebook 客户端优化实践后,App 启动提速65%

随机推荐

  1. android studio Listview的使用
  2. android 8.0通知栏的适配
  3. android进度条演示
  4. Android(安卓)VideoView
  5. 安卓简易计算器
  6. Android学习(21) -- Android版本号和API Le
  7. EventBus 3 for Android
  8. GPS accuracy in Android
  9. Android初学习 - LinearLayout、Relative
  10. webview 5.0以上 图片不显示问题