Hackjustu Hackjustu - 6 months ago 172
Java Question

How to use interceptor to add Headers in Retrofit 2.0

Our team decide to adopt Retrofit 2.0 and I'm doing some initial research on it. I'm a newbie to this library and hope to get some help from the community:)

As stated in the title, I'm wondering how to use

interceptor
to add customized headers via Retrofits 2.0 in our Android app. There are many tutorials about using
interceptor
to add headers in Retrofit 1.X, but since the APIs have changed a lot in the latest version, I'm not sure how to adapt those methods in the new version. Also, Retrofit hasn't update its new documentation yet.

For example, in the following codes, how should I implement the
Interceptor
class to add extra headers? Besides, what exactly is the undocumented
Chain
object
? When will the
intercept()
be called?

OkHttpClient client = new OkHttpClient();
client.interceptors().add(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(chain.request());

// How to add extra headers?

return response;
}
});

Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_API_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();


Could anyone share some idea on this issue?

Thanks!!

Answer

Check this out.

public class HeaderInterceptor
        implements Interceptor {
    @Override
    public Response intercept(Chain chain)
            throws IOException {
        Request request = chain.request();
        request = 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;
    }
}
Comments