我尝试使用以下代码联系 https 服务器:
HttpResponse response = new DefaultHttpClient().execute(new HttpGet("https://www.google.com"));
它运行良好(它返回谷歌页面和状态码 200 OK)。
我还尝试使用以下服务器联系同一台服务器:
BasicHttpParams clientparams = new BasicHttpParams();
[... clientparams initializazion...]
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
SSLSocketFactory sf = SSLSocketFactory.getSocketFactory();
sf.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);
schemeRegistry.register(new Scheme("https", sf, 443));
ClientConnectionManager cm = new ThreadSafeClientConnManager(clientparams, schemeRegistry);
HttpClient myClient = new DefaultHttpClient(cm, clientparams);
HttpResponse response = myClient.execute(new HttpGet("https://www.google.com"));
这也很有效。我也尝试过使用其他服务器,并且总是可以正常工作。
那么,当我需要使用 SchemeRegistry 来初始化 http 客户端时,有人可以向我解释一下吗?此外,在哪些情况下需要使用自定义 KeyStore 初始化 SSLSocketFactory?