3

我有一个问题,在某些 HTTP 401 错误的情况下OkHttp不会Authenticator调用该方法。authenticate拦截器总是被调用,但验证器有时被调用,有时不被调用。一旦它没有调用它,它将在几分钟内不会调用它,并且所有网络调用都将失败并显示 HTTP 401。然后在 5-6 分钟后它将“解开”并authenticate再次调用该方法。

我用它来刷新令牌。如果令牌到期时间设置为一小时,则没有问题,但是当我们将到期时间设置为一分钟(用于测试)时,身份验证器将停止工作。

当在调试器中快速单步执行代码时,authenticate方法被输入,但事件其第一行没有执行,它只是从方法中退出。我有一个日志作为未打印的第一行。我已经尝试过synchronised访问和非同步。身份验证器是用 Kotlin 编写的。

这是另一个 SO question中描述的问题的延续。我发现它甚至不适用于Retrofit具有一个客户端的一个实例OkHttp,因此我创建了一个新问题。

OkHttp 3.10.0/3.11.0、Retrofit 2.4.0、android compile SDK 27 和 build tools 28.0.1 都会发生这种情况。在具有 Android 6 和 8.1 的真实设备上,调试和发布构建,所以看起来它没有

编辑:

经过更多调试后,我发现身份验证器与 OkHttp 3.9.1 + Retrofit 2.3.0 完美配合。任何更新的东西都不适用于频繁的 HTTP 401 错误。使用带有 Retrofit 2.3.0 的 OkHttp 3.10.0 或更新版本不起作用,并且带有 OkHttp 3.9.1 的 Retrofit 2.4.0 也不起作用。较新的 OkHttp+Retrofit 的其他组合也不起作用。

还有一个额外的信息是我使用 RxJava2 适配器用于 Retrofit 2 ( com.squareup.retrofit2:adapter-rxjava2),总是与 Retrofit 库相同的版本。我正在使用 RxJava2 2.1.9,我刚刚尝试了最新的 2.2.2,除了旧的 OkHttp+Retrofit 组合外,仍然无法正常工作。

4

0 回答 0