HttpClientUtils获取responseCode(含https)
使用apache的httpclient支持SSL(https)安全协议
1.调用方法
int code = HttpClientUtils.postForReturnCode(url.toString());
2.HttpClientUtils代码
package com.sf.integration.sso.access; import java.net.URL; import java.security.Security; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.protocol.Protocol; import org.apache.commons.httpclient.protocol.ProtocolSocketFactory; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; public class HttpClientUtils { private static final Logger log = Logger.getLogger(HttpClientUtils.class); public static String get(String url) { return send("get", url); } public static String post(String url) { return send("post", url); } //返回code的方法 public static int postForReturnCode(String url) { return sendForReturnCode("post", url); } public static String send(String method, String url) { String body = "error"; HttpMethod httpMethod = null; if (method.equalsIgnoreCase("post")) { httpMethod = new PostMethod(url); // 输入网址 } else { httpMethod = new GetMethod(url); // 输入网址 } HttpClient client = new HttpClient(); try { if (url.startsWith("https:")) { supportSSL(url, client); } client.getParams().setContentCharset("UTF-8"); // 处理中午字符串 client.executeMethod(httpMethod); body = httpMethod.getResponseBodyAsString(); int code = httpMethod.getStatusCode(); System.out.println(code); } catch (Exception e) { e.printStackTrace(); } return body; } public static int sendForReturnCode(String method, String url) { int code = 403; HttpMethod httpMethod = null; if (method.equalsIgnoreCase("post")) { httpMethod = new PostMethod(url); // 输入网址 } else { httpMethod = new GetMethod(url); // 输入网址 } HttpClient client = new HttpClient(); try { if (url.startsWith("https:")) { supportSSL(url, client); } client.getParams().setContentCharset("UTF-8"); // 处理中午字符串 client.executeMethod(httpMethod); code = httpMethod.getStatusCode(); } catch (Exception e) { e.printStackTrace(); } return code; } private static void supportSSL(String url, HttpClient client) { if(StringUtils.isBlank(url)) { return; } String siteUrl = StringUtils.lowerCase(url); if (!(siteUrl.startsWith("https"))) { return; } try { setSSLProtocol(siteUrl, client); } catch (Exception e) { log.error("setProtocol error ", e); } Security.setProperty( "ssl.SocketFactory.provider","com.tool.util.DummySSLSocketFactory"); } private static void setSSLProtocol(String strUrl, HttpClient client) throws Exception { URL url = new URL(strUrl); String host = url.getHost(); int port = url.getPort(); if (port <= 0) { port = 443; } ProtocolSocketFactory factory = new DummySSLSocketFactory(); Protocol authhttps = new Protocol("https", factory, port); Protocol.registerProtocol("https", authhttps); client.getHostConfiguration().setHost(host, port, authhttps); } }
3.DummySSLSocketFactory验证代码
package com.sf.integration.sso.access; 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.SecureProtocolSocketFactory; public class DummySSLSocketFactory implements SecureProtocolSocketFactory { 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 void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; } } }
相关推荐
Kafka 2020-09-18
Wepe0 2020-10-30
杜倩 2020-10-29
windle 2020-10-29
minerd 2020-10-28
mengzuchao 2020-10-22
Junzizhiai 2020-10-10
bxqybxqy 2020-09-30
风之沙城 2020-09-24
kingszelda 2020-09-22
大唐帝国前营 2020-08-18
yixu0 2020-08-17
TangCuYu 2020-08-15
xiaoboliu00 2020-08-15
songshijiazuaa 2020-08-15
xclxcl 2020-08-03
zmzmmf 2020-08-03
newfarhui 2020-08-03
likesyour 2020-08-01