Android Retrofit 更新 HTTP 客户端配置
Posted
技术标签:
【中文标题】Android Retrofit 更新 HTTP 客户端配置【英文标题】:Android Retrofit update HTTP client configuration 【发布时间】:2017-08-09 20:51:12 【问题描述】:我们有一个案例,当我们使用带有 OKHttp 客户端和 Retrofit 的证书固定时,我们可能必须更新公钥。我的问题是在初始化改造后(例如,当收到新的公钥时)我将如何更新 http 客户端的证书 pinner?
我是否更新 http 客户端中的 CertificatePinner,然后创建一个新的改造实例?还是有更简单的方法?
任何建议表示赞赏。
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
clientBuilder.certificatePinner(NetworkUtils.getCertificatePinner()) ;
OKHTTPClient client = clientBuilder.build();
Retrofit myRetrofit = new Retrofit.Builder()
.baseUrl(url)
.client(client)
.build();
// Now I need to update the certificate pinner, like this?
client.certificatePinner(NetworkUtils.getCertificatePinner());
myRetrofit = new Retrofit.Builder()
.baseUrl(url)
.client(client)
.build();
【问题讨论】:
我认为你应该为构建改造对象创建单例类。获取 certificatePinner 后,您可以调用 Singleton 调用方法并更改改造对象。 使用拦截器。当服务器抛出一些特定的错误消息时,您发出新请求以获取证书详细信息,保存它们并使用新证书详细信息继续旧请求。 【参考方案1】:您是否尝试过使用拦截器。内部类 ExpiredSessionInterceptor 的内容:Interceptor
override fun intercept(chain: Interceptor.Chain): Response
val request = chain.request()
val response = chain.proceed(request)
if (response.code() == 202)
val newRequest = request.newBuilder().build()
return chain.proceed(newRequest)
else
return response;
【讨论】:
以上是关于Android Retrofit 更新 HTTP 客户端配置的主要内容,如果未能解决你的问题,请参考以下文章
retrofit2.HttpException:Android 中的 HTTP 302
Android实战----从Retrofit源码分析到Java网络编程以及HTTP权威指南想到的