gpt4 book ai didi

android - OkHttp认证器

转载 作者:行者123 更新时间:2023-11-29 15:39:31 24 4
gpt4 key购买 nike

我正在使用 OkHttp3Retrofit2。需要为所有请求替换 token 。我写了一个 TokenAuthentificator 类:

   public class TokenAuthenticator implements Authenticator {

@Override
public Request authenticate(Route route, okhttp3.Response response) throws IOException {
return response.request().newBuilder()
.header(Const.Url.COOKIE, preferenceHelper.getToken())
.build();
}
}

并使用 Retrofit 初始化它:

@Inject
public RestApi(PreferenceHelper preferenceHelper) {
TokenAuthenticator authenticator = new TokenAuthenticator();

this.preferenceHelper = preferenceHelper;
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.authenticator(authenticator)
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();


Retrofit retrofit = new Retrofit.Builder().baseUrl(Const.Url.API)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
user = retrofit.create(User.class);
}

但是,请求中的 header 仍然没有被替换。可能是什么问题?

请求示例:

 @Multipart
@POST("user_set_photo")
Observable<Response<TechmasResponse>> setPhoto(@Part("PERSONAL_PHOTO\"; filename=\"image.png\" ") RequestBody file);

在 Activity/fragment 中,看起来像这样:

Subscription request = restApi.user.setPhoto(body)
.compose(RxUtils.applySchedulers())
.subscribe(this::successAddPhoto, this::handleError);
unSubscribeOnDestroy(request);

最佳答案

Authenticator 在您请求返回 401 并且您需要更新您的 token 时使用,否则使用 Interceptor 来更新您的请求(听众,添加 token )。

不要使用拦截器来更新您的 token

因此您的TokenAuthenticator 必须实现Interceptor

关于android - OkHttp认证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43390146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com