Android Retrofit+okHttp简单配置

public class NetClientGenerator {

    public static final String API_BASE_URL = Constants.SERVER_URL + "/";

    private static OkHttpClient httpClient = null;

    private static final int TIMEOUT_SECONDS = 5;//5秒超时

    private static Retrofit.Builder builder =
            new Retrofit.Builder()
                    .baseUrl(API_BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create());//rxjava

    private static String CER = "-----BEGIN CERTIFICATE-----\n" +
            "SYYC3DCCAcSgAwIBAgIQFedi3q74dbVE3zzOvv0ZjTANBgkqhkiG9w0BAQUFADAXMRUwEwYDVQQD\n" +
            "AwxpWjk0Zml3dHhxdVowHhcNMTYwMzA5MDc1MDI0WhcNMTcwMzA5MDAwMDAwWjAXMRUwEwYDVQQD\n" +
            "AwxpWjk0Zml3dHhxdVowggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0YWWEQcjrmvZo\n" +
            "6zhBJAOwt4As4zNxtphq9lGimjRxQ1rIieX4z6UDc8NfFPZo7qUZKN742Rw6Hk0WCOGY05+Jn9zP\n" +
            "7e/s65736znWHCV/mWGTo22dTmD1mj4aG+LkTdIBTahbHGUfzA+MAvmTqQpladHFOvWN5d2p8/M3\n" +
            "hFozB2hUyAqL+FyIW+vSeGTfmPdzxTRt/6TIZ0Sr4AFsB2V4flfkn4AlwFVMX1+n0J3b50F7y2wx\n" +
            "huGgz+WzspOHl0sc2OGm8JNFFIotzXteNg8Nks/041zoXLrlhOQtAcMSc8nzDuMSWzvTUUjPsood\n" +
            "MSqwznwf9DZh2Vehr77myos1AgMBAAGjJDAiMAsGA1UdDwQEAwIEMDATBgNVHSUEDDAKBggrBgEF\n" +
            "BQcDATANBgkqhkiG9w0BAQUFAAOCAQEABKAAtPA+Tss2T5nj+XJA/V4myvaOkVfNKvYCHdYEASQu\n" +
            "Y0cMv8JuoXihGJAqTspWI2AxaviUeQ3NoI47UvhVcTsI1OTXmLDjkqO0q6YCoKnyOoftzFtTmApG\n" +
            "2IrxA5Tqnv2u6TcVshoxnOjmJueAE16YoT6UMfrSUAseXFh+zt2UHXtTBQbkxaA/2nkRLfii6UZV\n" +
            "iEnFUBevAX8ESY0GwbRHItqIyw5PoOrvdftMEacxuYe1bEiDh5z9E5lcgAxFG6yq9LL/cR/WTg2n\n" +
            "AEMtTwKAwFVf5Mws0BaEIiqV4V27Q7kwmeR3pfAq2ry0Mdm1wGRkh3yOw53SkAKUfZkQ7w==\n" +
            "-----END CERTIFICATE-----";

    public static <S> S createService(Class<S> serviceClass) {

        /* 添加一个拦截器 */

        if (httpClient == null) {
            createHttpClient();
            try {
                //createHttpClient1();
            } catch (Exception e) {
                e.getStackTrace();
            }
        }


        Retrofit retrofit = builder.client(httpClient).build();
        return retrofit.create(serviceClass);
    }   

 private static void createHttpClient() {
        httpClient = new OkHttpClient.Builder()
                .addInterceptor(new Interceptor() {
                    @Override
                    public Response intercept(Interceptor.Chain chain) throws IOException {

                        Request newRequest;
                    /* Header加入cookie */
                        String cookieStr = MyApplication.getInstance().getCookieStr();
                        if (!TextUtils.isEmpty(cookieStr)) {
                            newRequest = chain.request().newBuilder().addHeader("Cookie", cookieStr).build();
                        } else {
                            newRequest = chain.request();
                        }

                        Response response = chain.proceed(newRequest);

                    /*
                     * 取出cookie保存
                     * 短信验证码和登录接口都有cookie返回
                      * */
                        if (response.request().url().toString().equalsIgnoreCase(API_BASE_URL + "api/Account/Login")
                                || response.request().url().toString().startsWith((API_BASE_URL + "api/Account/SendVerifyCode/"))) {

                            List<String> cookieStringList = response.headers("Set-Cookie");
                            for (String str : cookieStringList) {
                                String[] tempStrs = str.split(";");
                                MyApplication.getInstance().setCookieStr(tempStrs[0]);
//                                Response response1 = chain.proceed(newRequest);
//                                LogUtil.d("NetApiInterface", "请求:" + response1.request().url() + "\n返回:" + response1.body().string());
                                return response;

                            }
                        }
//                        Response response1 = chain.proceed(newRequest);
//                        LogUtil.d("NetApiInterface", "请求:" + response1.request().url() + "\n返回:" + response1.body().string());
                        return response;

                    }
                })
                .readTimeout(TIMEOUT_SECONDS, TimeUnit.SECONDS)
                .connectTimeout(TIMEOUT_SECONDS, TimeUnit.SECONDS)
                .writeTimeout(TIMEOUT_SECONDS, TimeUnit.SECONDS)
//                .addNetworkInterceptor(new StethoInterceptor())
                .build();

    }

    /*
     * 用这个方法可以实现https请求
     */
    private static void createHttpClient1() throws Exception {

        CertificateFactory cf = CertificateFactory.getInstance("X.905");
        InputStream cert = MyApplication.getInstance().getResources().getAssets().open(Constants.CRET);
        Certificate ca;
        ca = cf.generateCertificate(cert);

        // creating a KeyStore containing our trusted CAs
        String keyStoreType = KeyStore.getDefaultType();
        KeyStore keyStore = KeyStore.getInstance(keyStoreType);
        keyStore.load(null, null);
        keyStore.setCertificateEntry("ca", ca);

        // creating a TrustManager that trusts the CAs in our KeyStore
        String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
        tmf.init(keyStore);

        // creating an SSLSocketFactory that uses our TrustManager
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, tmf.getTrustManagers(), null);

        httpClient = new OkHttpClient.Builder()
                .sslSocketFactory(sslContext.getSocketFactory())
                .hostnameVerifier(new HostnameVerifier() {
                    @Override
                    public boolean verify(String hostname, SSLSession session) {
                        return true;
                    }
                })
                .addInterceptor(new Interceptor() {
                    @Override
                    public Response intercept(Interceptor.Chain chain) throws IOException {

                        Request newRequest;
                    /* Header加入cookie */
                        String cookieStr = MyApplication.getInstance().getCookieStr();
                        if (!TextUtils.isEmpty(cookieStr)) {
                            newRequest = chain.request().newBuilder().addHeader("Cookie", cookieStr).build();
                        } else {
                            newRequest = chain.request();
                        }

                        Response response = chain.proceed(newRequest);

                    /*
                     * 取出cookie保存
                     * 短信验证码和登录接口都有cookie返回
                      * */
                        if (response.request().url().toString().equalsIgnoreCase(API_BASE_URL + "api/Account/Login")
                                || response.request().url().toString().startsWith((API_BASE_URL + "api/Account/SendVerifyCode/"))) {

                            List<String> cookieStringList = response.headers("Set-Cookie");
                            for (String str : cookieStringList) {
                                if(str.startsWith(".ASPXSYTH=")){
                                    String[] tempStrs = str.split(";");
                                    MyApplication.getInstance().setCookieStr(tempStrs[0]);
                                    return response;
                                }

                            }
                        }
//                        Response response1 = chain.proceed(newRequest);
//                        LogUtil.d("NetApiInterface", "请求:" + response1.request().url() + "\n返回:" + response1.body().string());
                        return response;

                    }
                })
                .readTimeout(TIMEOUT_SECONDS, TimeUnit.SECONDS)
                .connectTimeout(TIMEOUT_SECONDS, TimeUnit.SECONDS)
                .writeTimeout(TIMEOUT_SECONDS, TimeUnit.SECONDS)
                .build();
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值