httpClient 4.2版本發送https請求忽略證書
1 創建忽略證書的httpsClient類繼承默認的DefaultHttpClient
package cn.com.maxtech.website.call;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
public class HttpsClient extends DefaultHttpClient {
public HttpsClient() throws Exception {
super();
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
ctx.init(null, new TrustManager[] { tm }, null);
SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
ClientConnectionManager ccm = this.getConnectionManager();
SchemeRegistry sr = ccm.getSchemeRegistry();
sr.register(new Scheme("https", 443, ssf));
}
}
2 創建發送json數據的方法
public static Map<String, String> postJosnHttps(String url, Map<String, String> params, Map<String, String> heads,
String charset) throws Exception {
DefaultHttpClient httpClient = null;
HttpPost httpPost = null;
String result = null;
Map<String, String> resMap = new HashMap<String, String>();
try {
httpClient = new HttpsClient();
httpPost = new HttpPost(url);
// 設置參數
List<NameValuePair> list = new ArrayList<NameValuePair>();
Iterator iterator = params.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String, String> elem = (Entry<String, String>) iterator.next();
list.add(new BasicNameValuePair(elem.getKey(), elem.getValue()));
}
Header[] heads1 = new Header[heads.size()];
int i = 0;
for (Entry<String, String> head : heads.entrySet()) {
heads1[i] = new BasicHeader(head.getKey(), head.getValue());
i++;
}
if (heads1.length > 0) {
httpPost.setHeaders(heads1);
}
if (list.size() > 0) {
String reqstr = JsonUtils.mapToStr((Map) params);
StringEntity entity = new StringEntity(reqstr);
log.debug(" 請求 = " + reqstr);
httpPost.setEntity(entity);
}
HttpResponse response = httpClient.execute(httpPost);
if (response != null) {
HttpEntity resEntity = response.getEntity();
result = EntityUtils.toString(resEntity, charset);
resMap = JsonUtils.strToMap(result);
}
return resMap;
} catch (Exception ex) {
log.error(ex);
ex.printStackTrace();
return resMap;
}
}
/**
* https訪問 param
*
* @param url 服務器url
* @param params body參數
* @param heads 頭部參數
* @return
* @throws Exception
*/
public static Map<String, String> postParamHttps(String url, Map<String, String> params, Map<String, String> heads,
String charset) throws Exception {
DefaultHttpClient httpClient = null;
HttpPost httpPost = null;
String result = null;
Map<String, String> resMap = new HashMap<String, String>();
try {
httpClient = new HttpsClient();
httpPost = new HttpPost(url);
// 設置參數
List<NameValuePair> list = new ArrayList<NameValuePair>();
Iterator iterator = params.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String, String> elem = (Entry<String, String>) iterator.next();
list.add(new BasicNameValuePair(elem.getKey(), elem.getValue()));
}
Header[] heads1 = new Header[heads.size()];
int i = 0;
for (Entry<String, String> head : heads.entrySet()) {
heads1[i] = new BasicHeader(head.getKey(), head.getValue());
i++;
}
if (heads1.length > 0) {
httpPost.setHeaders(heads1);
}
if (list.size() > 0) {
HttpEntity entity = new UrlEncodedFormEntity(list);
httpPost.setEntity(entity);
}
HttpResponse response = httpClient.execute(httpPost);
if (response != null) {
HttpEntity resEntity = response.getEntity();
result = EntityUtils.toString(resEntity, charset);
resMap = JsonUtils.strToMap(result);
}
return resMap;
} catch (Exception ex) {
log.error(ex);
ex.printStackTrace();
return resMap;
}
}