有时候要求Retrofit2的接口中每个都要增加上headers,又不想做重复的事情,可以使用这种方法来为每个request请求都设置上相同的请求头header。
修改请求头request headers主要是通过拦截器来实现,下面是我自己根据需要设置的。如果还有增加其他的header,可以再进行增加。
- /**
- * 请求拦截器,修改请求header
- */
- private class RequestInterceptor implements Interceptor{
- @Override
- public Response intercept(Chain chain) throws IOException {
- Request request = chain.request()
- .newBuilder()
- .addHeader("Content-Type", "text/html; charset=UTF-8")
- // .addHeader("Accept-Encoding", "*")
- .addHeader("Connection", "keep-alive")
- .addHeader("Accept", "*/*")
- .addHeader("Access-Control-Allow-Origin", "*")
- .addHeader("Access-Control-Allow-Headers", "X-Requested-With")
- .addHeader("Vary", "Accept-Encoding")
- // .addHeader("Cookie", "add cookies here")
- .build();
- Log.v("zcb", "request:" + request.toString());
- Log.v("zcb", "request headers:" + request.headers().toString());
- return chain.proceed(request);
- }
- }
使用方法:
- private OkHttpClient getOkHttpClient() {
- //定制OkHttp
- OkHttpClient.Builder httpClientBuilder = new OkHttpClient
- .Builder();
- //设置超时时间
- httpClientBuilder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
- httpClientBuilder.writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
- httpClientBuilder.readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
- //使用拦截器
- httpClientBuilder.addInterceptor(new RequestInterceptor());
- httpClientBuilder.addInterceptor(new LogInterceptor());
- return httpClientBuilder.build();
- }