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

Android Retrofit2&OkHttp3添加统一的请求头Header_第1张图片

在使用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(Classextends 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);
    }
}

你可能感兴趣的:(技术)