在OkHttp3中,不推荐使用以下内容: [A] :
test_new = separate_rows(df1, "Var_B", convert = FALSE) %>%
separate_rows("Var_A") %>%
arrange(Var_A)
由 [B] 代替:
sslSocketFactory(SSLSocketFactory sslSocketFactory)
这是我的问题:
[B] 中的 X509TrustManager 有什么用途?
在以下情况下使用 [B] 而不是 [A] 有什么优势?创建 SSLSocketFactory 对象时已经可以指定TrustManager吗?
在https://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.Builder.html#sslSocketFactory-javax.net.ssl.SSLSocketFactory-中 他们谈论在使用 [B] 时避免反射,有人可以解释吗?
更多信息:
在创建 SSLSocketFactory 对象时,已经可以在
中指定一个trustManager。 sslSocketFactory(SSLSocketFactory sslSocketFactory, X509TrustManager trustManager).
例如,通过执行以下操作,我得到了一个 SSLSocketFactory 对象:
sslContext.init(KeyManager[] arg0, TrustManager[] arg1, SecureRandom arg2).
使用 getTrustManager ()的方法可返回 TrustManager [] ,该方法包含客户端应信任的服务器证书。>
现在,因为
public SSLSocketFactory getSSLSocketFactory() {
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(getKeyManager(), getTrustManager(), new SecureRandom());
return sslContext.getSocketFactory();
}
希望我提供一个 X509TrustManager 对象,我可以这样做:
sslSocketFactory(SSLSocketFactory sslSocketFactory, X509TrustManager trustManager)
但是,我感觉这不是他们期望我们使用它的方式。因此,欢迎任何投入。
谢谢。
答案 0 :(得分:0)
该方法使用反射。原因在OkHttp documentation中说明:
/**
* Sets the socket factory used to secure HTTPS connections.
* If unset, the system default will be used.
*
* @deprecated [SSLSocketFactory] does not expose its [X509TrustManager], which is
* a field that OkHttp needs to build a clean certificate chain. This method
* instead must use reflection to extract the trust manager. Applications should
* prefer to call `sslSocketFactory(SSLSocketFactory, X509TrustManager)`,
* which avoids such reflection.
*/