com.foxinmy.weixin4j.http.factory.HttpClientFactory Maven / Gradle / Ivy
package com.foxinmy.weixin4j.http.factory;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.X509TrustManager;
import com.foxinmy.weixin4j.http.HttpClient;
import com.foxinmy.weixin4j.http.HttpParams;
import com.foxinmy.weixin4j.http.support.apache3.HttpComponent3Factory;
import com.foxinmy.weixin4j.http.support.apache4.HttpComponent4Factory;
import com.foxinmy.weixin4j.http.support.netty.Netty4HttpClientFactory;
import com.foxinmy.weixin4j.http.support.okhttp.OkHttpClientFactory;
/**
* HttpClient工厂生产类:参考netty的InternalLoggerFactory
*
* @className HttpClientFactory
* @author jinyu([email protected])
* @date 2015年8月12日
* @since JDK 1.6
* @see
*/
public abstract class HttpClientFactory {
/**
* 默认的HttpClient
*/
private static volatile HttpClientFactory defaultFactory = newDefaultFactory();
private static volatile HttpParams defaultParams;
/**
* NettyHttpClient -> ApacheHttpClient(HttpComponent3&4) ->
* OkHttpClient(2&3) -> SimpleHttpClient(HttpURLConnection)
*
* @return
*/
private static HttpClientFactory newDefaultFactory() {
HttpClientFactory f;
try {
f = new Netty4HttpClientFactory();
} catch (Throwable e1) {
try {
f = new HttpComponent4Factory();
} catch (Throwable e2) {
try {
f = new HttpComponent3Factory();
} catch (Throwable e3) {
try {
f = new OkHttpClientFactory();
} catch (Throwable e4) {
f = new SimpleHttpClientFactory();
}
}
}
}
return f;
}
/**
* 获取默认的HttpClient
*
* @return
*/
public static HttpClientFactory getDefaultFactory() {
return defaultFactory;
}
/**
* 显式设置默认的HttpClient
*
* @param defaultFactory
*/
public static void setDefaultFactory(HttpClientFactory defaultFactory) {
if (defaultFactory == null) {
throw new IllegalArgumentException(
"'defaultFactory' must not be empty");
}
HttpClientFactory.defaultFactory = defaultFactory;
}
/**
* 获取默认的HttpParams
*
* @return
*/
public static HttpParams getDefaultParams() {
return defaultParams;
}
/**
* Resolve the Http Parameter
*
* @param params
* 请求参数
*/
public static void setDefaultParams(HttpParams params) {
if (params == null) {
throw new IllegalArgumentException("'params' must not be empty");
}
HttpClientFactory.defaultParams = params;
}
/**
* 获取HttpClient实例
*
* @return
*/
public static HttpClient getInstance() {
return getInstance(HttpClientFactory.defaultParams);
}
/**
* 获取HttpClient实例
*
* @param params
* Http参数
*
* @return HttpClinet实例
*/
public static HttpClient getInstance(HttpParams params) {
HttpClientFactory clientFactory = getDefaultFactory();
return clientFactory.newInstance(params);
}
/**
* 获取HttpClient实例
*
* @param params
* http参数 可为空
* @return
*/
public abstract HttpClient newInstance(HttpParams params);
public static SSLContext allowSSLContext() {
try {
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null,
new X509TrustManager[] { AllowX509TrustManager.GLOBAL },
new java.security.SecureRandom());
return sslContext;
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(
"Create SSLContext NoSuchAlgorithmException:", e);
} catch (KeyManagementException e) {
throw new RuntimeException(
"Create SSLContext KeyManagementException:", e);
}
}
public static class AllowX509TrustManager implements X509TrustManager {
public static final X509TrustManager GLOBAL = new AllowX509TrustManager();
private AllowX509TrustManager() {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
@Override
public void checkServerTrusted(
X509Certificate[] paramArrayOfX509Certificate,
String paramString) throws CertificateException {
}
@Override
public void checkClientTrusted(
X509Certificate[] paramArrayOfX509Certificate,
String paramString) throws CertificateException {
}
}
public static class AllowHostnameVerifier implements HostnameVerifier {
public static final HostnameVerifier GLOBAL = new AllowHostnameVerifier();
private AllowHostnameVerifier() {
}
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy