|
@@ -1,6 +1,7 @@
|
|
|
package com.itant.shibei.net;
|
|
package com.itant.shibei.net;
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
import android.content.Context;
|
|
|
|
|
+import android.util.Log;
|
|
|
|
|
|
|
|
import com.itant.shibei.manager.UserInfoManager;
|
|
import com.itant.shibei.manager.UserInfoManager;
|
|
|
import com.miekir.network.BuildConfig;
|
|
import com.miekir.network.BuildConfig;
|
|
@@ -8,12 +9,27 @@ import com.miekir.network.core.RetrofitInstaller;
|
|
|
import com.readystatesoftware.chuck.ChuckInterceptor;
|
|
import com.readystatesoftware.chuck.ChuckInterceptor;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
|
|
+import java.io.InputStream;
|
|
|
|
|
+import java.security.KeyManagementException;
|
|
|
|
|
+import java.security.KeyStore;
|
|
|
|
|
+import java.security.KeyStoreException;
|
|
|
|
|
+import java.security.NoSuchAlgorithmException;
|
|
|
|
|
+import java.security.NoSuchProviderException;
|
|
|
|
|
+import java.security.cert.Certificate;
|
|
|
|
|
+import java.security.cert.CertificateException;
|
|
|
|
|
+import java.security.cert.CertificateFactory;
|
|
|
|
|
+import java.security.cert.X509Certificate;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
|
|
+import javax.net.ssl.SSLContext;
|
|
|
|
|
+import javax.net.ssl.SSLSocketFactory;
|
|
|
|
|
+import javax.net.ssl.TrustManagerFactory;
|
|
|
|
|
+
|
|
|
import okhttp3.Interceptor;
|
|
import okhttp3.Interceptor;
|
|
|
import okhttp3.OkHttpClient;
|
|
import okhttp3.OkHttpClient;
|
|
|
import okhttp3.Request;
|
|
import okhttp3.Request;
|
|
|
import okhttp3.Response;
|
|
import okhttp3.Response;
|
|
|
|
|
+import okhttp3.logging.HttpLoggingInterceptor;
|
|
|
import retrofit2.Retrofit;
|
|
import retrofit2.Retrofit;
|
|
|
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
|
|
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
|
|
|
import retrofit2.converter.gson.GsonConverterFactory;
|
|
import retrofit2.converter.gson.GsonConverterFactory;
|
|
@@ -30,13 +46,61 @@ public class RetrofitHelper {
|
|
|
|
|
|
|
|
private Context mContext;
|
|
private Context mContext;
|
|
|
private Retrofit mRetrofit;
|
|
private Retrofit mRetrofit;
|
|
|
|
|
+ private Retrofit mOtherRetrofit;
|
|
|
private OkHttpClient mOkHttpClient;
|
|
private OkHttpClient mOkHttpClient;
|
|
|
|
|
+ private OkHttpClient mOtherClient;
|
|
|
|
|
+
|
|
|
|
|
+ private Interceptor mHeaderInterceptor = new Interceptor() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Response intercept(Chain chain) throws IOException {
|
|
|
|
|
+ String token = "";
|
|
|
|
|
+ String email = "";
|
|
|
|
|
+ if (UserInfoManager.getInstance().isLogin()) {
|
|
|
|
|
+ token = UserInfoManager.getInstance().getBeiUser().token;
|
|
|
|
|
+ email = UserInfoManager.getInstance().getBeiUser().email;
|
|
|
|
|
+ }
|
|
|
|
|
+ Request request = chain.request()
|
|
|
|
|
+ .newBuilder()
|
|
|
|
|
+ .addHeader("token", token)
|
|
|
|
|
+ .addHeader("email", email)
|
|
|
|
|
+ .build();
|
|
|
|
|
+ return chain.proceed(request);
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ private static SSLSocketFactory getSSLContext (Context context){
|
|
|
|
|
+ try {
|
|
|
|
|
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
|
|
|
|
|
+ //privatekey.crt证书文件,将它放在Assets目录下
|
|
|
|
|
+ InputStream is = context.getAssets().open("lomsxj.crt");
|
|
|
|
|
+
|
|
|
|
|
+ Certificate ca = cf.generateCertificate(is);
|
|
|
|
|
+ Log.i("getSSLContext ", "ca=" + ((X509Certificate) ca).getSubjectDN());
|
|
|
|
|
+
|
|
|
|
|
+ KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
|
|
|
|
|
+ keyStore.load(null,null);
|
|
|
|
|
+ keyStore.setCertificateEntry("ca",ca);
|
|
|
|
|
+
|
|
|
|
|
+ TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
|
|
|
|
|
+ tmf.init(keyStore);
|
|
|
|
|
+
|
|
|
|
|
+ SSLContext ssContext = SSLContext.getInstance("TLSv1", "AndroidOpenSSL");
|
|
|
|
|
+ ssContext.init(null,tmf.getTrustManagers(),null);
|
|
|
|
|
+
|
|
|
|
|
+ return ssContext.getSocketFactory();
|
|
|
|
|
+
|
|
|
|
|
+ } catch (CertificateException | KeyManagementException | NoSuchProviderException | NoSuchAlgorithmException | KeyStoreException | IOException e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
private RetrofitHelper() {
|
|
private RetrofitHelper() {
|
|
|
mContext = RetrofitInstaller.mInstallerContext;
|
|
mContext = RetrofitInstaller.mInstallerContext;
|
|
|
|
|
|
|
|
// 默认请求的超时等配置
|
|
// 默认请求的超时等配置
|
|
|
mOkHttpClient = getDefaultOkHttpClient();
|
|
mOkHttpClient = getDefaultOkHttpClient();
|
|
|
|
|
+ mOtherClient = getDefaultOkHttpClient();
|
|
|
|
|
|
|
|
// 默认请求的地址、转换规则等配置,Base URL以不能包含路径,只能是http://加上IP或域名
|
|
// 默认请求的地址、转换规则等配置,Base URL以不能包含路径,只能是http://加上IP或域名
|
|
|
mRetrofit = new Retrofit.Builder()
|
|
mRetrofit = new Retrofit.Builder()
|
|
@@ -60,53 +124,23 @@ public class RetrofitHelper {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
- * 设置请求的host,转换规则也用默认的
|
|
|
|
|
- * @param baseUrl 请求的host
|
|
|
|
|
- */
|
|
|
|
|
- public void setRequestHost(String baseUrl) {
|
|
|
|
|
- mRetrofit = new Retrofit.Builder()
|
|
|
|
|
- .baseUrl(baseUrl)
|
|
|
|
|
- .client(mOkHttpClient)
|
|
|
|
|
- .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
|
|
|
|
|
- .addConverterFactory(GsonConverterFactory.create())
|
|
|
|
|
- .build();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- * 设置请求的客户端
|
|
|
|
|
- */
|
|
|
|
|
- public void setRetrofit(Retrofit retrofit) {
|
|
|
|
|
- mRetrofit = retrofit;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
/**
|
|
/**
|
|
|
*
|
|
*
|
|
|
* @return 默认的请求设置
|
|
* @return 默认的请求设置
|
|
|
*/
|
|
*/
|
|
|
public OkHttpClient getDefaultOkHttpClient() {
|
|
public OkHttpClient getDefaultOkHttpClient() {
|
|
|
- Interceptor headInterceptor = new Interceptor() {
|
|
|
|
|
|
|
+ HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
|
|
|
@Override
|
|
@Override
|
|
|
- public Response intercept(Chain chain) throws IOException {
|
|
|
|
|
- String token = "";
|
|
|
|
|
- String email = "";
|
|
|
|
|
- if (UserInfoManager.getInstance().isLogin()) {
|
|
|
|
|
- token = UserInfoManager.getInstance().getBeiUser().token;
|
|
|
|
|
- email = UserInfoManager.getInstance().getBeiUser().email;
|
|
|
|
|
- }
|
|
|
|
|
- Request request = chain.request()
|
|
|
|
|
- .newBuilder()
|
|
|
|
|
- .addHeader("token", token)
|
|
|
|
|
- .addHeader("email", email)
|
|
|
|
|
- .build();
|
|
|
|
|
- return chain.proceed(request);
|
|
|
|
|
|
|
+ public void log(String message) {
|
|
|
|
|
+ //LogTool.logInfo("Retrofit:", message);
|
|
|
}
|
|
}
|
|
|
- };
|
|
|
|
|
|
|
+ });
|
|
|
|
|
+ interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
|
|
|
|
|
|
|
|
return new OkHttpClient.Builder()
|
|
return new OkHttpClient.Builder()
|
|
|
- .addInterceptor(headInterceptor)
|
|
|
|
|
|
|
+ .addInterceptor(mHeaderInterceptor)
|
|
|
//.addInterceptor(interceptor)
|
|
//.addInterceptor(interceptor)
|
|
|
- //.addInterceptor(dataInterceptor)
|
|
|
|
|
|
|
+ //.sslSocketFactory(getSSLContext(context))
|
|
|
.addInterceptor(new ChuckInterceptor(mContext))
|
|
.addInterceptor(new ChuckInterceptor(mContext))
|
|
|
.retryOnConnectionFailure(true)
|
|
.retryOnConnectionFailure(true)
|
|
|
.connectTimeout(20, TimeUnit.SECONDS)
|
|
.connectTimeout(20, TimeUnit.SECONDS)
|
|
@@ -122,4 +156,18 @@ public class RetrofitHelper {
|
|
|
public <T> T getRequestApi(Class<T> apiClass) {
|
|
public <T> T getRequestApi(Class<T> apiClass) {
|
|
|
return mRetrofit.create(apiClass);
|
|
return mRetrofit.create(apiClass);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ *
|
|
|
|
|
+ * @return 请求接口
|
|
|
|
|
+ */
|
|
|
|
|
+ public <T> T getRequestApi(Class<T> apiClass, String baseUrl) {
|
|
|
|
|
+ mOtherRetrofit = new Retrofit.Builder()
|
|
|
|
|
+ .baseUrl(baseUrl)
|
|
|
|
|
+ .client(mOtherClient)
|
|
|
|
|
+ .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
|
|
|
|
|
+ .addConverterFactory(GsonConverterFactory.create())
|
|
|
|
|
+ .build();
|
|
|
|
|
+ return mOtherRetrofit.create(apiClass);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|