public
class
HttpClientHelper {
private
static
HttpClient httpClient;
private
HttpClientHelper() {
}
public
static
synchronized
HttpClient getHttpClient() {
if
(
null
== httpClient) {
try
{
KeyStore trustStore = KeyStore.getInstance(KeyStore
.getDefaultType());
trustStore.load(
null
,
null
);
SSLSocketFactory sf =
new
SSLSocketFactoryEx(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
HttpParams params =
new
BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params,
HTTP.DEFAULT_CONTENT_CHARSET);
HttpProtocolParams.setUseExpectContinue(params,
true
);
ConnManagerParams.setTimeout(params,
10000
);
HttpConnectionParams.setConnectionTimeout(params,
10000
);
HttpConnectionParams.setSoTimeout(params,
10000
);
SchemeRegistry schReg =
new
SchemeRegistry();
schReg.register(
new
Scheme(
"http"
, PlainSocketFactory
.getSocketFactory(),
80
));
schReg.register(
new
Scheme(
"https"
, sf,
443
));
ClientConnectionManager conManager =
new
ThreadSafeClientConnManager(
params, schReg);
httpClient =
new
DefaultHttpClient(conManager, params);
}
catch
(Exception e) {
e.printStackTrace();
return
new
DefaultHttpClient();
}
}
return
httpClient;
}
}
class
SSLSocketFactoryEx
extends
SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance(
"TLS"
);
public
SSLSocketFactoryEx(KeyStore truststore)
throws
NoSuchAlgorithmException, KeyManagementException,
KeyStoreException, UnrecoverableKeyException {
super
(truststore);
TrustManager tm =
new
X509TrustManager() {
@Override
public
java.security.cert.X509Certificate[] getAcceptedIssuers() {
return
null
;
}
@Override
public
void
checkClientTrusted(
java.security.cert.X509Certificate[] chain, String authType)
throws
java.security.cert.CertificateException {
}
@Override
public
void
checkServerTrusted(
java.security.cert.X509Certificate[] chain, String authType)
throws
java.security.cert.CertificateException {
}
};
sslContext.init(
null
,
new
TrustManager[] { tm },
null
);
}
@Override
public
Socket createSocket(Socket socket, String host,
int
port,
boolean
autoClose)
throws
IOException, UnknownHostException {
return
sslContext.getSocketFactory().createSocket(socket, host, port,
autoClose);
}
@Override
public
Socket createSocket()
throws
IOException {
return
sslContext.getSocketFactory().createSocket();
}
}