OkHttp Authenticator有时不调用HTTP 401上的身份验证

时间:2018-10-16 08:53:49

标签: authentication retrofit2 rx-java2 okhttp3 authenticator

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

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

在调试器中快速单步执行代码时,将输入authenticate方法,但如果未执行其第一行,则仅从该方法退出。我有一个日志作为未打印的第一行。我已经尝试过authenticate访问和非同步访问。身份验证者是用Kotlin写的。

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

这发生在OkHttp 3.10.0 / 3.11.0,Retrofit 2.4.0,android编译SDK 27和构建工具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(OkHttp),该版本始终与Retrofit库相同。我正在使用RxJava2 2.1.9,但我刚刚尝试了最新的2.2.2,但除了旧的OkHttp + Retrofit组合之外,仍然无法正常工作。

0 个答案:

没有答案