点击打开链接
以下是网上搜到的解决方案,在初始化httpclient实例前加上两行:
-
- ProtocolSocketFactory fcty = new MySecureProtocolSocketFactory();
- Protocol.registerProtocol("https", new Protocol("https", fcty, 443));
- httpClient = new HttpClient();
-
package com.jingshou;
-
-
import java.io.IOException;
-
import java.net.InetAddress;
-
import java.net.Socket;
-
import java.net.UnknownHostException;
-
-
import javax.net.ssl.SSLContext;
-
import javax.net.ssl.TrustManager;
-
-
import org.apache.commons.httpclient.ConnectTimeoutException;
-
import org.apache.commons.httpclient.HttpClientError;
-
import org.apache.commons.httpclient.params.HttpConnectionParams;
-
import org.apache.commons.httpclient.protocol.ControllerThreadSocketFactory;
-
import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory;
-
-
public class MySecureProtocolSocketFactory implements
- SecureProtocolSocketFactory {
-
- private SSLContext sslContext = null;
-
- /**
-
* Constructor for MySecureProtocolSocketFactory.
-
*/
- public MySecureProtocolSocketFactory() {
- }
-
- /**
-
*
-
* @return
-
*/
- private static SSLContext createEasySSLContext() {
- try {
- SSLContext context = SSLContext.getInstance("SSL");
- context.init(null, new TrustManager[] { new MyX509TrustManager() },
- null);
- return context;
- } catch (Exception e) {
- throw new HttpClientError(e.toString());
- }
- }
-
- /**
-
*
-
* @return
-
*/
- private SSLContext getSSLContext() {
- if (this.sslContext == null) {
- this.sslContext = createEasySSLContext();
- }
- return this.sslContext;
- }
-
- /*
-
* (non-Javadoc)
-
*
-
* @see org.apache.commons.httpclient.protocol.ProtocolSocketFactory#createSocket(java.lang.String,
-
* int, java.net.InetAddress, int)
-
*/
- public Socket createSocket(String host, int port, InetAddress clientHost,
- int clientPort) throws IOException, UnknownHostException {
-
- return getSSLContext().getSocketFactory().createSocket(host, port,
- clientHost, clientPort);
- }
-
- /*
-
* (non-Javadoc)
-
*
-
* @see org.apache.commons.httpclient.protocol.ProtocolSocketFactory#createSocket(java.lang.String,
-
* int, java.net.InetAddress, int,
-
* org.apache.commons.httpclient.params.HttpConnectionParams)
-
*/
- public Socket createSocket(final String host, final int port,
- final InetAddress localAddress, final int localPort,
- final HttpConnectionParams params) throws IOException,
- UnknownHostException, ConnectTimeoutException {
- if (params == null) {
- throw new IllegalArgumentException("Parameters may not be null");
- }
- int timeout = params.getConnectionTimeout();
- if (timeout == 0) {
- return createSocket(host, port, localAddress, localPort);
- } else {
- return ControllerThreadSocketFactory.createSocket(this, host, port,
- localAddress, localPort, timeout);
- }
- }
-
- /*
-
* (non-Javadoc)
-
*
-
* @see SecureProtocolSocketFactory#createSocket(java.lang.String,int)
-
*/
- public Socket createSocket(String host, int port) throws IOException,
- UnknownHostException {
- return getSSLContext().getSocketFactory().createSocket(host, port);
- }
-
- /*
-
* (non-Javadoc)
-
*
-
* @see SecureProtocolSocketFactory#createSocket(java.net.Socket,java.lang.String,int,boolean)
-
*/
- public Socket createSocket(Socket socket, String host, int port,
- boolean autoClose) throws IOException, UnknownHostException {
- return getSSLContext().getSocketFactory().createSocket(socket, host,
- port, autoClose);
- }
- }
MyX509TrustManager类:
-
package com.jingshou;
-
-
import java.security.cert.CertificateException;
-
import java.security.cert.X509Certificate;
-
-
import javax.net.ssl.X509TrustManager;
-
-
public class MyX509TrustManager implements X509TrustManager {
-
- /* (non-Javadoc)
-
* @see javax.net.ssl.X509TrustManager#checkClientTrusted(java.security.cert.X509Certificate[], java.lang.String)
-
*/
- public void checkClientTrusted(X509Certificate[] arg0, String arg1)
- throws CertificateException {
-
- }
-
- /* (non-Javadoc)
-
* @see javax.net.ssl.X509TrustManager#checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String)
-
*/
- public void checkServerTrusted(X509Certificate[] arg0, String arg1)
- throws CertificateException {
-
- }
-
- /* (non-Javadoc)
-
* @see javax.net.ssl.X509TrustManager#getAcceptedIssuers()
-
*/
- public X509Certificate[] getAcceptedIssuers() {
- return null;
- }
-
- }