httpclient跳过https请求的验证

一、因为在使用https发送请求的时候会涉及,验证方式。但是这种方式在使用的时候很不方便。特别是在请求外部接口的时候,所以这我写了一个跳过验证的方式。(供参考)
二、加入包,这里用的是commons-httpclient 3.1 的包。一般请求采用最新的httpclient4.5就可以了
<dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency>
三、这里我们实现3个类
1、MyX509TrustManager(这个方法直接实现X509TrustManager,X509TrustManager在javax.net.ssl.X509TrustManager里面)
这里直接实现不用改任何东西
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;
}
}2、MySecureProtocolSocketFactory(这里我们需要用到SSLContext,还需要改写一个实现SecureProtocolSocketFactory的方法)
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 { //这里添加一个属性,主要目的就是来获取ssl跳过验证
private SSLContext sslContext = null; /**
* Constructor for MySecureProtocolSocketFactory. */
public MySecureProtocolSocketFactory() {
} /**
* 这个创建一个获取SSLContext的方法,导入MyX509TrustManager进行初始化
* @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());
}
} /**
* 判断获取SSLContext
* @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 Inethttpclient跳过https请求的验证
一、因为在使用https发送请求的时候会涉及,验证方式。但是这种方式在使用的时候很不方便。特别是在请求外部接口的时候,所以这我写了一个...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇
下一篇



