authenticate
authenticate和401错误配合使用,当一次请求,服务端返回401的时候,会走authenticate方法
前题是OkHttpClient设置了Authenticator,支持的代码如下
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.authenticator(new Authenticator() {
public Request authenticate(Route route, Response response){
Request orignRequest = response.request();
Request.Builder b = r.newBuilder();
}
}
//...ignore code
同样,要是代理服务器的身份认真失败处理:builder.proxyAuthenticator()
而实现的代码在RetryAndFollowUpInterceptor里,当状态码是401或407的时候会走到authenticate方法
private Request followUpRequest(Response userResponse){
//...ignore code
int responseCode = userResponse.code();
switch (responseCode) {
case HTTP_PROXY_AUTH://407
return client.proxyAuthenticator().authenticate(route, userResponse);
case HTTP_UNAUTHORIZED://401
return client.authenticator().authenticate(route, userResponse);
只要返回request不为空,就会接着走请求:
@Override public Response intercept(Chain chain) {
Request request = chain.request();
streamAllocation = new StreamAllocation(
client.connectionPool(), createAddress(request.url()), callStackTrace);
int followUpCount = 0;
Response priorResponse = null;
while (true) {
//...ignore code
if (followUp == null) {
if (!forWebSocket) {
streamAllocation.release();
}
return response;
}
//...ignore code