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 客户端配置的主要内容,如果未能解决你的问题,请参考以下文章

Android开发,使用Retrofit发送HTTP请求

retrofit2.HttpException:Android 中的 HTTP 302

Android Retrofit详解

Android实战----从Retrofit源码分析到Java网络编程以及HTTP权威指南想到的

【Android】Retrofit网络请求参数注解,@Path、@Query、@QueryMap...

Android实战----从Retrofit源码分析到Java网络编程以及HTTP权威指南想到的