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.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; /** * httpclient 无信任证书使用https * @author qtt * */ public class MySSLProtocolSocketFactory implements ProtocolSocketFactory { private SSLContext sslcontext = null; private SSLContext createSSLContext() { SSLContext sslcontext=null; try { sslcontext = SSLContext.getInstance("SSL"); sslcontext.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } return sslcontext; } private SSLContext getSSLContext() { if (this.sslcontext == null) { this.sslcontext = createSSLContext(); } return this.sslcontext; } public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { return getSSLContext().getSocketFactory().createSocket( socket, host, port, autoClose ); } public Socket createSocket(String host, int port) throws IOException, UnknownHostException { return getSSLContext().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"); } int timeout = 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 { public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; } @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 { } } } import java.text.SimpleDateFormat; import java.util.Date; import java.util.UUID; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.RequestEntity; import org.apache.commons.httpclient.protocol.Protocol; import org.apache.commons.lang.StringUtils; import app.cn.qtt.cmbase.util.Base64; import app.cn.qtt.cmbase.util.MySSLProtocolSocketFactory; import app.cn.qtt.hangup.common.CacheConstants; public class HttpDoPost { public static String doPost(String url, RequestEntity entity, Header[] headers) throws Exception { HttpClient httpClient = new HttpClient(); PostMethod post = new PostMethod(url); post.setRequestEntity(entity); for (Header header : headers) { post.setRequestHeader(header); } int status = httpClient.executeMethod(post); Header[] hs = post.getResponseHeaders(); for (Header header : hs) { System.out.println(header.getName()+":"+header.getValue()); } if (status != HttpStatus.SC_OK) { return post.getResponseBodyAsString(); } return post.getResponseBodyAsString(); } public static String doPostSSL(String url, RequestEntity entity, Header[] headers) throws Exception { HttpClient httpClient = new HttpClient(); Protocol myhttps = new Protocol("https", new MySSLProtocolSocketFactory(), 443); Protocol.registerProtocol("https", myhttps); PostMethod post = new PostMethod(url); post.setRequestEntity(entity); for (Header header : headers) { post.setRequestHeader(header); } int status = httpClient.executeMethod(post); Header[] hs = post.getResponseHeaders(); for (Header header : hs) { System.out.println(header.getName()+":"+header.getValue()); } if (status != HttpStatus.SC_OK) { return post.getResponseBodyAsString(); } return post.getResponseBodyAsString(); } }
http与https请求
最新推荐文章于 2023-09-22 23:55:27 发布