Android Retrofit+okHttp简单配置
2016-09-05 14:59
351 查看
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(); } }
相关文章推荐
- RxJava+Retrofit+OkHttp组合在网络请求中的简单配置
- Retrofit+RxJava+RxAndroid+OkHttp简单封装
- Android Retrofit 2.0 配置OkHttpClient
- Retrofit的简单封装--更方便的配置okhttp
- Android Retrofit2+okhttp3详细配置,解决URL乱码的问题。
- Android Http 标准框架,底层 OkHttp,与 RxJava 完美结合,比 Retrofit 更简单易用。
- Retrofit的简单实用,配置okhttpclient
- android,retrofit配置okhttp
- Android 开发实例教程 零基础学习 1小时入门 图解说明教程 化复杂为简单 配置好的android开发环境 带实例
- Android中Tomcat的简单配置和使用
- android上面的OkHttp的简单get和post demo
- Android greenDao的简单配置和使用
- 在Eclipse里关联Android源码的简单办法及常用配置
- 第二章:Android之NDK配置与简单使用
- Retrofit 2.0使用详解,配合OkHttp、Gson,Android最强网络请求框架
- ActiveAndroid数据库框架简单应用和配置
- 【Android】简单详细的安卓开发环境配置及运行第一个程序Helloworld
- android动画(1)各种动画简单代码与xml配置
- 黑马程序员 Android零基础学习 化复杂为简单 配置好的android开发环境
- 在Windows下的Java与android环境配置简单方法