使用httpClient来访问带有ssl安全协议的代码

首先使用httpCLient.jar包来编写一个工具类:HTTPSSecureProtocolSocketFactory.java
import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketAddress; import java.net.UnknownHostException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.SocketFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.apache.commons.httpclient.ConnectTimeoutException; import org.apache.commons.httpclient.params.HttpConnectionParams; import org.apache.commons.httpclient.protocol.ProtocolSocketFactory; public classHTTPSSecureProtocolSocketFactory implements ProtocolSocketFactory {//SecureProtocolSocketFactoryprivate SSLContext sslcontext = null; private SSLContext createSSLContext() { SSLContext sslcontext = null; try { sslcontext = SSLContext.getInstance("SSL"); sslcontext.init(null, newTrustManager[] { new TrustAnyTrustManager() }, new ; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } returnsslcontext; } private SSLContext getSSLContext() { if (null == this.sslcontext) { this.sslcontext = createSSLContext(); } return this.sslcontext; } public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { returngetSSLContext().getSocketFactory().createSocket(socket, host, port, autoClose); } public Socket createSocket(String host, int port) throws IOException, UnknownHostException { returngetSSLContext().getSocketFactory().createSocket(host, port); } public Socket createSocket(String host, int port, InetAddress clientHost, int clientPort) throws IOException, UnknownHostException {return getSSLContext().getSocketFactory().createSocket(host, port, clientHost, clientPort); }public Socket createSocket(String host, int port, InetAddress localAddress, int localPort, HttpConnectionParams params) throws IOException, UnknownHostException, ConnectTimeoutException {if (params == null) { throw new IllegalArgumentException("Parameters may not be null"); } inttimeout = params.getConnectionTimeout(); SocketFactory socketfactory =getSSLContext().getSocketFactory(); if (timeout == 0) { return socketfactory.createSocket(host, port, localAddress, localPort); } else { Socket socket = socketfactory.createSocket(); SocketAddress localaddr = new InetSocketAddress(localAddress, localPort); SocketAddress remoteaddr = new InetSocketAddress(host, port); socket.bind(localaddr); socket.connect(remoteaddr, timeout);return socket; } } private static class TrustAnyTrustManager implements X509TrustManager { publicvoid checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { }public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return newX509Certificate[] {}; } } } 
上述代码是copy过来的并没有排版,各位有需要的可以复制到你所在的类文件,该类是能够用的,如何调用这个工具类的用法如下:


// 为支持https step1 Protocol https = new Protocol("https", new HTTPSSecureProtocolSocketFactory(), 443); Protocol.registerProtocol("https", https);

这个中间部分的代码则是你使用httpClient正常访问http网站,或者你合作伙伴提供给你的开放性的api一系列操作(也就是将一个链接的头部信息,所需参数,认证信息之类的发送过去,得到相应的响应结果,这是对于api的开发流程大概概述)

在你获得响应的结果流后,使用

// 为支持https step1 over Protocol.unregisterProtocol("https")
来关闭httpClient支持ssl;

同样,本人之前并没有使用这种方式来访问https之类的网站,而是采用java中keytool这个工具导入https网站的安全证书,此方式可看我上一遍博客java导入ssl证书
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值