有時候要求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(); }