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

来源:互联网 发布:ug11.0编程新功能 编辑:程序博客网 时间:2024/05/20 18:04


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

让所有网络请求都附上你的 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);    }};

完整用法:

public class HttpUtils {    private String token = null;    private static HttpUtils self = new HttpUtils();    private HttpUtils() {    }    public static HttpUtils getInstance() {        return self;    }    public <T> T createRequest(Class<? extends T> t) {        Gson gson = new GsonBuilder()                .setDateFormat("yyyy-MM-dd hh:mm:ss")                .create();        Retrofit retrofit = new Retrofit.Builder()                .baseUrl(BaseConstant.BASE_REQUEST_URL)                .client(genericClient())                .addConverterFactory(ScalarsConverterFactory.create())                .addConverterFactory(GsonConverterFactory.create(gson))                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                .build();        return retrofit.create(t);    }    //统一拦截器    private OkHttpClient genericClient() {        UserModel user = (UserModel) ACache.getAsObject("user");        if (user == null) {            token = "";        } else {            token = user.getToken();        }        return new OkHttpClient.Builder()                .addInterceptor(new Interceptor() {                    @Override                    public Response intercept(Chain chain) throws IOException {                        Request request = chain.request()                                .newBuilder()                                .addHeader("Authorization", token)                                .build();                        return chain.proceed(request);                    }                })                .build();    }    public MultipartBody.Part createMultipartBody(String key, String fileName, File source) {        RequestBody file = RequestBody.create(MediaType.parse(BaseConstant.APPLICATION_OCTET_STREAM), source);        return MultipartBody.Part.createFormData(key, fileName, file);    }}

阅读全文
0 0
原创粉丝点击