react-native https notwork request failed

V0.62.0 android遇上https:notwork request failed

在MainApplication.java同级新建CustomClientFactory文件,上图。

CustomClientFactory代码:

package com.facebook.react.modules.network;

import com.facebook.react.modules.network.OkHttpClientFactory;

import com.facebook.react.modules.network.OkHttpClientFactory;

import com.facebook.react.modules.network.OkHttpClientProvider;

import com.facebook.react.modules.network.ReactCookieJarContainer;

import java.security.cert.CertificateException;

import java.util.ArrayList;

import java.util.List;

import java.util.concurrent.TimeUnit;

import javax.net.ssl.HostnameVerifier;

import javax.net.ssl.SSLContext;

import javax.net.ssl.SSLSession;

import javax.net.ssl.SSLSocketFactory;

import javax.net.ssl.TrustManager;

import javax.net.ssl.X509TrustManager;

import okhttp3.CipherSuite;

import okhttp3.ConnectionSpec;

import okhttp3.OkHttpClient;

import okhttp3.TlsVersion;

import static android.content.ContentValues.TAG;

public class CustomClientFactory implements OkHttpClientFactory {

    private static final String TAG = "OkHttpClientFactory";

    @Override

    public OkHttpClient createNewNetworkModuleClient() {

        try {

            // Create a trust manager that does not validate certificate chains

            final TrustManager[] trustAllCerts = new TrustManager[]{

                    new X509TrustManager() {

                        @Override

                        public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {

                        }

                        @Override

                        public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {

                        }

                        @Override

                        public java.security.cert.X509Certificate[] getAcceptedIssuers() {

                            return new java.security.cert.X509Certificate[]{};

                        }

                    }

            };

            // Install the all-trusting trust manager

            final SSLContext sslContext = SSLContext.getInstance("SSL");

            sslContext.init(null, trustAllCerts, new java.security.SecureRandom());

            // Create an ssl socket factory with our all-trusting manager

            final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();

            OkHttpClient.Builder builder = new OkHttpClient.Builder()

                    .connectTimeout(0, TimeUnit.MILLISECONDS).readTimeout(0, TimeUnit.MILLISECONDS)

                    .writeTimeout(0, TimeUnit.MILLISECONDS).cookieJar(new ReactCookieJarContainer());

            builder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]);

            builder.hostnameVerifier(new HostnameVerifier() {

                @Override

                public boolean verify(String hostname, SSLSession session) {

                    return true;

                }

            });

            OkHttpClient okHttpClient = builder.build();

            return okHttpClient;

        } catch (Exception e) {

            // Log.e(TAG, e.getMessage());

            throw new RuntimeException(e);

        }

    }

}




在MainApplication中添加

import com.facebook.react.modules.network.*;

onCreate()方法中添加:OkHttpClientProvider.setOkHttpClientFactory(new CustomClientFactory()); //add this line.


重启就ok了

注:post请求需加content-type

end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。