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();
}
}
Android Retrofit+okHttp简单配置
猜你喜欢
转载自blog.csdn.net/sanyang730/article/details/52440316
今日推荐
周排行