我知道可以通过OkHttpClient
向所有请求添加拦截器,但我想知道是否可以在Okhttp
中为所有请求添加标头除了使用OkHttpClient
的一个或两个请求。
例如,在我的 API 中,除了Authorization: Bearer token-here
(获取令牌)和oauth/token
之外,所有请求都需要持票令牌(api/users
标头) (注册用户)路由。是否可以在一步中使用OkHttpClient
为除排除的请求之外的所有请求添加拦截器,还是应该为每个请求单独添加标头?
答案 0 :(得分:13)
我找到了答案!
基本上我像往常一样需要一个拦截器,我需要检查那里的 URL 以了解我是否应该添加授权标头。
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;
}
}