在訪問HTTPS時需要安裝認證在默認情況下,設置所有都可以
創建一個HttpClient 這個設置認證那些
1
private
static
HttpClient client = HttpClientHelper.getHttpClient();
public static String HTTPPostJson(String url, JSONObject params) { // HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(url); String responseStr = null; try { StringEntity entity = new StringEntity(params.toString(),HTTP.UTF_8); entity.setContentType("application/json"); post.setEntity(entity); HttpResponse response = client.execute(post); if (HttpURLConnection.HTTP_OK != response.getStatusLine() .getStatusCode()) { Log.e("post result code", ""+response.getStatusLine() .getStatusCode()); return null; } HttpEntity entity2 = response.getEntity(); responseStr = EntityUtils.toString(entity2); } catch (Exception e) { e.printStackTrace(); } return responseStr; }
HttpClientHelper.java
package com.weima.smarthome.utils; import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; import java.security.cert.CertificateFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.apache.http.HttpVersion; import org.apache.http.client.HttpClient; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.params.ConnManagerParams; import org.apache.http.conn.scheme.PlainSocketFactory; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.scheme.SocketFactory; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.http.params.HttpProtocolParams; import org.apache.http.protocol.HTTP; import android.content.res.AssetManager; public class HttpClientHelper { private static HttpClient httpClient; private static final String CLIENT_KEY_KEYSTORE = "BKS"; //"JKS";//密庫,這裏用的是BouncyCastle密庫 private static final String CLIENT_TRUST_KEYSTORE = "BKS"; //"JKS";// private static final String CLIENT_KET_PASSWORD = "***"; //私鑰密碼 private HttpClientHelper() { } public static synchronized HttpClient getHttpClient() { if (null == httpClient) { // 初始化工 try { // 讀取證書 // KeyStore kks = KeyStore.getInstance(KeyStore.getDefaultType());//BKS or JKS android只支持bks格式的密庫, // kks.load(context.getAssets().open("cacerts.bks"), CLIENT_KET_PASSWORD.toCharArray()); KeyStore kks = KeyStore.getInstance(KeyStore .getDefaultType()); //添加認證 kks.load(null, null); SSLSocketFactory sf = new SSLSocketFactoryEx(kks); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); //允許?主機的驗? HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); HttpProtocolParams.setUseExpectContinue(params, true); // 設置連接管理器的超時 ConnManagerParams.setTimeout(params, 10000); // 設置連接超時 HttpConnectionParams.setConnectionTimeout(params, 10000); // 設置socket超時 HttpConnectionParams.setSoTimeout(params, 10000); // 設置http https支持 SchemeRegistry schReg = new SchemeRegistry(); schReg.register(new Scheme("http", PlainSocketFactory .getSocketFactory(), 55555)); schReg.register(new Scheme("https", (SocketFactory) sf, 55556)); 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(); } }