非原創,也不知道作者是誰
根據有關資料解決如下:
1、編寫SSLSocketFactoryEx,以代替原有的SSLSocketFactory,
代碼如下:
代碼如下 | 複製代碼 |
package com.nbcio.baishicha.yunbiji; import java.io.IOException; 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 javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager;
import org.apache.http.conn.ssl.SSLSocketFactory;
public class SSLSocketFactoryEx extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("TLS");
public SSLSocketFactoryEx(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException { super(truststore);
TrustManager tm = new X509TrustManager() {
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); }
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(); } }
2、編寫新的HttpClient getNewHttpClient來代替原有的DefaultHttpClient,代碼如下: |
3、在postRequest調用的時候如下方式就可以:
代碼如下 | 複製代碼 |
HttpResponse httpResponse = (HttpResponse) getNewHttpClient().execute(postMethod); |