1

在使用带有 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();
4

1 回答 1

0

您是否尝试过使用拦截器。内部类 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;
        }
    }

}
于 2017-08-10T05:00:56.687 回答