新的API 中谷歌已經(jīng)不再支持HttpClient在這里我們簡要介紹下HttpsURLConnection 的https配置 (如果是正式頒發(fā)的證書則不需要配置這些下面代碼只針對非正式的證書)
PRivate void GetHttps() { InputStream caInput = null; try { String https = "https://kyfw.12306.cn/otn/leftTicket/init"; // 從輸入流中獲取ca證書我們將ca證書文件存放在了assert目錄下 AssetManager am = getAssets(); CertificateFactory cf = CertificateFactory.getInstance("X.509"); caInput=am.open("srca.cer"); Certificate ca = cf.generateCertificate(caInput); // 創(chuàng)建包含我們的受信任CA的KeyStore String keyStoreType = KeyStore.getDefaultType(); KeyStore keyStore = KeyStore.getInstance(keyStoreType); keyStore.load(null, null); keyStore.setCertificateEntry("ca", ca); // 創(chuàng)建一個(gè)TrustManager來信任我們的KeyStore中的CA String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); tmf.init(keyStore); // 創(chuàng)建使用我們的TrustManager的SSLContext SSLContext context = SSLContext.getInstance("TLS"); context.init(null, tmf.getTrustManagers(), null); // 告訴URLConnection從我們的SSLContext中使用SocketFactory URL url = new URL(https); HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection(); urlConnection.setSSLSocketFactory(context.getSocketFactory()); InputStream in = urlConnection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); StringBuffer sb = new StringBuffer(); String line; while ((line = br.readLine()) != null) { sb.append(line); } content=sb.toString(); Message message = new Message(); message.what = 0; handler.sendMessage(message); } catch (Exception e) { e.printStackTrace(); } finally { try { caInput.close(); } catch (IOException e) { e.printStackTrace(); } } }新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注