将 Network SocketFactory 与 SSL 结合使用
Use Network SocketFactory with SSL
我正在尝试从 WiFi 或移动数据访问我的服务器,具体取决于哪个接口正在应答。用例如下:
- WiFi 始终开启。
- 如果服务器没有通过 WiFi 响应(例如因为没有互联网连接),那么我会将以后的请求重定向到蜂窝数据。
- 当连接通过 WiFi 恢复时,我将下一个请求重定向到 WiFi。
为此,我想将 ConnectivityManager 与 TRANSPORT_CELLULAR 或 TRANSPORT_WIFI 一起使用。然后它 returns 一个我可以使用的网络对象。
之后我计划将 socketFactory 从网络 class 传递到 OkHttpClient。
OkHttpClient client = new OkHttpClient.Builder()
.socketFactory(network.getSocketFactory())
.build();
问题:服务器使用 https 连接。所以我正在使用 socketSSLFactory 构建 OkHttpClient,它是使用 SSLContext 及其方法 getSocketFactory 构建的。
所以问题如下:如何将 OkHttpClient 绑定到网络和 SSL 套接字工厂?
好的,所以我终于找到了如何执行它。
它需要同时使用 OkHttp 构建器的 socketFactory 和 SSLSocketFactory。
OkHttpClient.Builder httpBuilder = new OkHttpClient.Builder()
.sslSocketFactory(new MySSLSocketFactory(), new MyTrustManager())
.socketFactory(network.getSocketFactory())
.dns(new NetworkDns())
.hostnameVerifier(new MyHostnameVerifier());
具体来说,MySSLSocketFactory
没有绑定到我的网络对象。我不需要重写其中的 createSocket
方法。我只是将 network
对象的套接字工厂传递给 OkHttp 构建器。
不要忘记重写 dns
以及对 network
执行所需的名称解析。 (比照)
我正在尝试从 WiFi 或移动数据访问我的服务器,具体取决于哪个接口正在应答。用例如下: - WiFi 始终开启。 - 如果服务器没有通过 WiFi 响应(例如因为没有互联网连接),那么我会将以后的请求重定向到蜂窝数据。 - 当连接通过 WiFi 恢复时,我将下一个请求重定向到 WiFi。
为此,我想将 ConnectivityManager 与 TRANSPORT_CELLULAR 或 TRANSPORT_WIFI 一起使用。然后它 returns 一个我可以使用的网络对象。
之后我计划将 socketFactory 从网络 class 传递到 OkHttpClient。
OkHttpClient client = new OkHttpClient.Builder()
.socketFactory(network.getSocketFactory())
.build();
问题:服务器使用 https 连接。所以我正在使用 socketSSLFactory 构建 OkHttpClient,它是使用 SSLContext 及其方法 getSocketFactory 构建的。
所以问题如下:如何将 OkHttpClient 绑定到网络和 SSL 套接字工厂?
好的,所以我终于找到了如何执行它。 它需要同时使用 OkHttp 构建器的 socketFactory 和 SSLSocketFactory。
OkHttpClient.Builder httpBuilder = new OkHttpClient.Builder()
.sslSocketFactory(new MySSLSocketFactory(), new MyTrustManager())
.socketFactory(network.getSocketFactory())
.dns(new NetworkDns())
.hostnameVerifier(new MyHostnameVerifier());
具体来说,MySSLSocketFactory
没有绑定到我的网络对象。我不需要重写其中的 createSocket
方法。我只是将 network
对象的套接字工厂传递给 OkHttp 构建器。
不要忘记重写 dns
以及对 network
执行所需的名称解析。 (比照