Android Retrofit2&OkHttp3添加统一的请求头Header

来源:互联网 发布:zgmf x20a 淘宝 编辑:程序博客网 时间:2024/05/19 12:18

在使用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;    }}
5 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 谷丙转氨酶46该怎么办 渣土车开飞机了怎么办 自己车撞自己车怎么办 撞了人没钱赔怎么办 闯红灯扣了6分怎么办 开共享汽车闯红灯了怎么办 新手如果不小心闯红灯怎么办 红绿灯左转车道直行了怎么办 跟着大车后面闯了红灯怎么办 宝宝私处好红怎么办呢 甲亢难怀孕怎么办才好 怀孕8周查出甲亢怎么办 电动车被交警拖走了怎么办 电动车车被城管拖走了怎么办 12123地理反编码失败怎么办 苹果手机地理反编码失败怎么办 城管执法过程被打怎么办 老婆看不起老公不让碰怎么办 老婆总不让碰该怎么办 机动车扣满12分怎么办 吊车吊运货物失控应该怎么办 车辆违章扣6分怎么办 最新交通法扣满12分怎么办 违章停车单丢了怎么办 违停告知单掉了怎么办 违章停车扣3分怎么办 驾驶证被扣12分怎么办 被贴条了条丢了怎么办 车停路边连续几天被贴条怎么办 车停在路边限号怎么办 违停的罚单丢了怎么办 借道左转红灯了 怎么办 道路上有锯齿线标志怎么办 被领导臭骂了一顿怎么办 酒驾撞了人逃跑怎么办处理 荣耀9home键掉了怎么办 今天开车把老太婆撞了怎么办 交通责任认定书不合理怎么办 交通事故救济金用了 没钱还怎么办 车脏了洗不干净怎么办 衣服上贴花掉了怎么办