How to use interceptor to add Headers in Retrofit 2.0?
Check this out.
public class HeaderInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request() .newBuilder() .addHeader("appid", "hello") .addHeader("deviceplatform", "android") .removeHeader("User-Agent") .addHeader("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0") .build(); Response response = chain.proceed(request); return response; }}
Kotlin
class HeaderInterceptor : Interceptor { override fun intercept(chain: Interceptor.Chain): Response = chain.run { proceed( request() .newBuilder() .addHeader("appid", "hello") .addHeader("deviceplatform", "android") .removeHeader("User-Agent") .addHeader("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0") .build() ) }}
Another alternative from the accepted answer
public class HeaderInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); request = request.newBuilder() .addHeader("headerKey0", "HeaderVal0") .addHeader("headerKey0", "HeaderVal0--NotReplaced/NorUpdated") //new header added .build(); //alternative Headers moreHeaders = request.headers().newBuilder() .add("headerKey1", "HeaderVal1") .add("headerKey2", "HeaderVal2") .set("headerKey2", "HeaderVal2--UpdatedHere") // existing header UPDATED if available, else added. .add("headerKey3", "HeaderKey3") .add("headerLine4 : headerLine4Val") //line with `:`, spaces doesn't matter. .removeAll("headerKey3") //Oops, remove this. .build(); request = request.newBuilder().headers(moreHeaders).build(); /* ##### List of headers ##### */ // headerKey0: HeaderVal0 // headerKey0: HeaderVal0--NotReplaced/NorUpdated // headerKey1: HeaderVal1 // headerKey2: HeaderVal2--UpdatedHere // headerLine4: headerLine4Val Response response = chain.proceed(request); return response; }}
public class ServiceFactory { public static ApiClient createService(String authToken, String userName, String password) { OkHttpClient defaultHttpClient = new OkHttpClient.Builder() .addInterceptor( chain -> { Request request = chain.request().newBuilder() .headers(getJsonHeader(authToken)) .build(); return chain.proceed(request); }) .authenticator(getBasicAuthenticator(userName, password)) .build(); return getService(defaultHttpClient); } private static Headers getJsonHeader(String authToken) { Headers.Builder builder = new Headers.Builder(); builder.add("Content-Type", "application/json"); builder.add("Accept", "application/json"); if (authToken != null && !authToken.isEmpty()) { builder.add("X-MY-Auth", authToken); } return builder.build(); } private static Authenticator getBasicAuthenticator(final String userName, final String password) { return (route, response) -> { String credential = Credentials.basic(userName, password); return response.request().newBuilder().header("Authorization", credential).build(); }; } private static ApiClient getService(OkHttpClient defaultHttpClient) { return new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .client(defaultHttpClient) .build() .create(ApiClient.class); }}