2017-04-17 41 views
5

Wiem, że istnieje możliwość dodania przechwytywacza do wszystkich żądań za pośrednictwem OkHttpClient, ale chciałbym wiedzieć, czy istnieje możliwość dodania nagłówków do wszystkich żądań w Okhttp, z wyjątkiem jednego żądania lub dwóch przy użyciu OkHttpClient.Jak dodać przechwytywacz do wszystkich żądań interfejsu API oprócz jednego lub dwóch?

Na przykład w moim API wszystkie wnioski wymagają okaziciela tokena (Authorization: Bearer token-here nagłówku) z wyjątkiem oauth/token (aby otrzymać token) i api/users (aby zarejestrować użytkownika) drogi. Czy możliwe jest dodanie przechwytywacza dla wszystkich żądań z wyjątkiem wykluczonych przy użyciu OkHttpClient w jednym kroku, czy też powinienem dodać nagłówki indywidualnie dla każdego żądania?

Odpowiedz

8

Znalazłem odpowiedź!

Zasadniczo potrzebowałem przechwytywacza jak zwykle i musiałem sprawdzić adres URL, aby dowiedzieć się, czy powinienem dodać nagłówek autoryzacji, czy nie.

import java.io.IOException; 

import okhttp3.Interceptor; 
import okhttp3.Request; 
import okhttp3.Response; 

/** 
* Created by Omar on 4/17/2017. 
*/ 

public class NetInterceptor implements Interceptor { 
    @Override 
    public Response intercept(Chain chain) throws IOException { 
     Request request = chain.request(); 
     if (request.url().encodedPath().equalsIgnoreCase("/oauth/token") 
       || (request.url().encodedPath().equalsIgnoreCase("/api/v1/users") && request.method().equalsIgnoreCase("post"))) { 
      return chain.proceed(request); 
     } 
     Request newRequest = request.newBuilder() 
       .addHeader("Authorization", "Bearer token-here") 
       .build(); 
     Response response = chain.proceed(newRequest); 
     return response; 
    } 
}