Okhttp 3.x 动态添加/删除验证器/拦截器

Posted

技术标签:

【中文标题】Okhttp 3.x 动态添加/删除验证器/拦截器【英文标题】:Okhttp 3.x dynamically add/remove authenticator / interceptor 【发布时间】:2016-11-08 01:36:21 【问题描述】:

是否可以向现有的Okhttp 实例添加/删除身份验证器和/或拦截器?如果是,怎么做?

【问题讨论】:

好吧,API 解释得很清楚:github.com/square/okhttp/wiki/… 它展示了如何在 okhttp 实例创建期间添加拦截器。但是我找不到在不创建新实例的情况下添加它的方法。 【参考方案1】:

不,这是不可能的。

但是,您可以从现有客户端创建构建器,并对其进行更改。这将共享调度程序、连接池等。

OkHttpClient.Builder clientBuilder = client1.newBuilder();
clientBuilder.networkInterceptors().add(0, serviceInterceptor);
OkHttpClient client2 = clientBuilder.build();

在javadochttps://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.html中有一个调整客户端超时的例子

【讨论】:

问题是我通常通过依赖注入将 okhttp 创建为单个实例对象,因此每次添加/删除拦截器时都无法将单个实例“交换”为另一个实例。 我猜 OP 指的是“一个现有的 Okhttp 实例” 它可能不适合你,但它就是答案。抱歉不适合

以上是关于Okhttp 3.x 动态添加/删除验证器/拦截器的主要内容,如果未能解决你的问题,请参考以下文章

okHttp 3.x身份验证器未被调用

okhttp添加日志拦截器,上传文件RequestBody.writeTo调用两次

okhttp添加日志拦截器,上传文件RequestBody.writeTo调用两次

Okhttp拦截器问题

Retrofit-OkHttp 动态切换服务器地址

OkHttp 和 Retrofit,用并发请求刷新令牌