簡體   English   中英

在 Android/Java 中發送 HTTPS Post 請求

[英]Sending HTTPS Post Request in Android/Java

由於 sslSocketFactory(javax.net.ssl.SSLSocketFactory)' 已棄用,我應該改用什么? 謝謝... 已棄用。 SSLSocketFactory 不會暴露其 X509TrustManager,這是 OkHttp 構建干凈證書鏈所需的字段。 此方法必須使用反射來提取信任管理器。 應用程序應該更喜歡調用 sslSocketFactory(SSLSocketFactory, X509TrustManager),這樣可以避免這種反射。 設置用於保護 HTTPS 連接的套接字工廠。 如果未設置,將使用系統默認值。

try {
                        client = new OkHttpClient().newBuilder()
                                .sslSocketFactory(trustCert().getSocketFactory())
                                .build();
                    } catch (CertificateException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } catch (KeyStoreException e) {
                        e.printStackTrace();
                    } catch (NoSuchAlgorithmException e) {
                        e.printStackTrace();
                    } catch (KeyManagementException e) {
                        e.printStackTrace();
                    }
                    MediaType mediaType = MediaType.parse("text/plain");
                    RequestBody body = new FormBody.Builder()
                            .build();
    
                    Request request = new Request.Builder()
                            .url("https://example.com")
                            .method("GET", null)
                            .addHeader("auth-token", token)
                            .addHeader("Authorization", "Bearer"+" "+token)
                            .build();
                    Response response = null;
                    try {
                        response = client.newCall(request).execute();
                        odgovor = response.body().string();
                        System.out.println(odgovor);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

      private SSLContext trustCert() throws CertificateException,IOException, KeyStoreException,
                NoSuchAlgorithmException, KeyManagementException {
            AssetManager assetManager = getAssets();
            InputStream is = getApplicationContext().getResources().openRawResource(R.raw.gdig2);
            CertificateFactory cf = CertificateFactory.getInstance("X.509");
            Certificate ca = cf.generateCertificate(is);
    
            // Create a KeyStore containing our trusted CAs
            String keyStoreType = KeyStore.getDefaultType();
            KeyStore keyStore = KeyStore.getInstance(keyStoreType);
            keyStore.load(null, null);
            keyStore.setCertificateEntry("ca", ca);
    
            // Create a TrustManager that trusts the CAs in our KeyStore
            String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
            TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
            tmf.init(keyStore);
    
            // Create an SSLContext that uses our TrustManager
            SSLContext context = SSLContext.getInstance("TLS");
            context.init(null, tmf.getTrustManagers(), null);
            return context;
        }

使用,#sslSocketFactory(SSLSocketFactory, X509TrustManager)

客戶端 = 新 okHttpClient().newBuilder().sslSocketFactory(trustCert().getSocketFactory(), (X509TrustManager) tmf.trustManagers.get(0));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM