Okhttp 액세스 https 12306

다음 클래스에서 getInstance 메서드를 호출하면 다음과 같이 HttpClient 객체에 액세스할 수 있습니다.
HTTPUtils utils = new HTTPUtils(getApplicationContext);
OkHttpClient client = utils.getInstance();
조작이 필요한 인터페이스에서client 대상을 얻으면 12306에 접근할 수 있습니다.
HTTPS에 대해서는 다음 기사를 참조하십시오.
OKHTTP 통신 사용(3) HTTPS
Android Https 관련 전체 분석package utils; import android.content.Context; import java.io.IOException; import java.io.InputStream; import java.security.GeneralSecurityException; import java.security.KeyStore; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; import java.util.Arrays; import java.util.Collection; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.X509TrustManager; import okhttp3.OkHttpClient; /** * https */ public final class HTTPSUtils { public OkHttpClient client = null; public Context mContext; public static HTTPSUtils httpsUtils = null; X509TrustManager trustManager; SSLSocketFactory sslSocketFactory; /** * HTTPS, * * @param context */ public HTTPSUtils(Context context) { mContext = context; final InputStream inputStream; try { // assets 12306 inputStream = mContext.getAssets().open("srca.cer"); // try { trustManager = trustManagerForCertificates(inputStream);// SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager[]{trustManager}, null); sslSocketFactory = sslContext.getSocketFactory(); } catch (GeneralSecurityException e) { throw new RuntimeException(e); } client = new OkHttpClient.Builder().sslSocketFactory(sslSocketFactory).build(); } catch (IOException e) { e.printStackTrace(); } } /** * ssl okhttpclient, https * * @param context * @return okhttpclient */ public OkHttpClient getInstance(Context context) { if (client == null) { httpsUtils = new HTTPSUtils(context); if (httpsUtils.client != null) { return httpsUtils.client; } } return client; } /** * */ /** * Returns a trust manager that trusts {@code certificates} and none other. HTTPS services whose * certificates have not been signed by these certificates will fail with a {@code * SSLHandshakeException}. * * This can be used to replace the host platform's built-in trusted certificates with a custom * set. This is useful in development where certificate authority-trusted certificates aren't * available. Or in production, to avoid reliance on third-party certificate authorities. * * * Warning: Customizing Trusted Certificates is Dangerous! * * Relying on your own trusted certificates limits your server team's ability to update their * TLS certificates. By installing a specific set of trusted certificates, you take on additional * operational complexity and limit your ability to migrate between certificate authorities. Do * not use custom trusted certificates in production without the blessing of your server's TLS * administrator. */ private X509TrustManager trustManagerForCertificates(InputStream in) throws GeneralSecurityException { CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); Collection extends Certificate> certificates = certificateFactory.generateCertificates(in); if (certificates.isEmpty()) { throw new IllegalArgumentException("expected non-empty set of trusted certificates"); } // Put the certificates a key store. char[] password = "password".toCharArray(); // Any password will work. KeyStore keyStore = newEmptyKeyStore(password); int index = 0; for (Certificate certificate : certificates) { String certificateAlias = Integer.toString(index++); keyStore.setCertificateEntry(certificateAlias, certificate); } // Use it to build an X509 trust manager. KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance( KeyManagerFactory.getDefaultAlgorithm()); keyManagerFactory.init(keyStore, password); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(keyStore); TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) { throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers)); } return (X509TrustManager) trustManagers[0]; } /** * password * * @param password * @return * @throws GeneralSecurityException */ private KeyStore newEmptyKeyStore(char[] password) throws GeneralSecurityException { try { KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); // , InputStream in = null; // By convention, 'null' creates an empty key store. keyStore.load(in, password); return keyStore; } catch (IOException e) { throw new AssertionError(e); } } }

좋은 웹페이지 즐겨찾기