http https信任任何证书的工具类



转载:http://www.cnblogs.com/handsomeye/p/5802448.html

向原作者致敬,如有冒犯可联系本人删除即可.


import java.io.BufferedReader;
   import java.io.InputStream;
   import java.io.InputStreamReader;
   import java.io.OutputStream;
   import java.net.HttpURLConnection;
   import java.net.URL;
   import java.net.URLEncoder;
   import java.util.Map;
  import java.util.Map.Entry;
  
  import javax.net.ssl.HostnameVerifier;
  import javax.net.ssl.HttpsURLConnection;
  import javax.net.ssl.SSLContext;
  import javax.net.ssl.SSLSession;
  import javax.net.ssl.SSLSocketFactory;
  import javax.net.ssl.TrustManager;
  
  import org.springframework.util.StringUtils;
  
 /**
   * http、https 请求工具类, 微信为https的请求
   * @author yehx
   *
   */
  public class HttpUtil {
  
      private static final String DEFAULT_CHARSET = "UTF-8";
  
      private static final String _GET = "GET"; // GET
      private static final String _POST = "POST";// POST
      public static final int DEF_CONN_TIMEOUT = 30000;
      public static final int DEF_READ_TIMEOUT = 30000;
  
      /**
       * 初始化http请求参数
      * 
      * @param url
      * @param method
       * @param headers
       * @return
       * @throws Exception
       */
      private static HttpURLConnection initHttp(String url, String method,
              Map<String, String> headers) throws Exception {
         URL _url = new URL(url);
          HttpURLConnection http = (HttpURLConnection) _url.openConnection();
          // 连接超时
          http.setConnectTimeout(DEF_CONN_TIMEOUT);
          // 读取超时 --服务器响应比较慢,增大时间
          http.setReadTimeout(DEF_READ_TIMEOUT);
          http.setUseCaches(false);
          http.setRequestMethod(method);
          http.setRequestProperty("Content-Type",
                  "application/x-www-form-urlencoded");
          http.setRequestProperty(
                  "User-Agent",
                  "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36");
          if (null != headers && !headers.isEmpty()) {
              for (Entry<String, String> entry : headers.entrySet()) {
                  http.setRequestProperty(entry.getKey(), entry.getValue());
              }
          }
          http.setDoOutput(true);
          http.setDoInput(true);
          http.connect();
         return http;
      }
  
      /**
       * 初始化http请求参数
       * 
       * @param url
       * @param method
       * @return
       * @throws Exception
       */
      private static HttpsURLConnection initHttps(String url, String method,
              Map<String, String> headers) throws Exception {
          TrustManager[] tm = { new MyX509TrustManager() };
          System.setProperty("https.protocols", "TLSv1");
          SSLContext sslContext = SSLContext.getInstance("TLS");
          sslContext.init(null, tm, new java.security.SecureRandom());
          // 从上述SSLContext对象中得到SSLSocketFactory对象
          SSLSocketFactory ssf = sslContext.getSocketFactory();
          URL _url = new URL(url);
          HttpsURLConnection http = (HttpsURLConnection) _url.openConnection();
          // 设置域名校验
          http.setHostnameVerifier(new HttpUtil().new TrustAnyHostnameVerifier());
          // 连接超时
          http.setConnectTimeout(DEF_CONN_TIMEOUT);
          // 读取超时 --服务器响应比较慢,增大时间
          http.setReadTimeout(DEF_READ_TIMEOUT);
          http.setUseCaches(false);
          http.setRequestMethod(method);
          http.setRequestProperty("Content-Type",
                  "application/x-www-form-urlencoded");
          http.setRequestProperty(
                  "User-Agent",
                  "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36");
         if (null != headers && !headers.isEmpty()) {
             for (Entry<String, String> entry : headers.entrySet()) {
                 http.setRequestProperty(entry.getKey(), entry.getValue());
             }
         }
         http.setSSLSocketFactory(ssf);
         http.setDoOutput(true);
         http.setDoInput(true);
         http.connect();
         return http;
     }
 
     /**
     * 
      * @description 功能描述: get 请求
      * @return 返回类型:
      * @throws Exception
      */
     public static String get(String url, Map<String, String> params,
             Map<String, String> headers) throws Exception {
         HttpURLConnection http = null;
         if (isHttps(url)) {
             http = initHttps(initParams(url, params), _GET, headers);
         } else {
             http = initHttp(initParams(url, params), _GET, headers);
         }
         InputStream in = http.getInputStream();
         BufferedReader read = new BufferedReader(new InputStreamReader(in,
                 DEFAULT_CHARSET));
         String valueString = null;
         StringBuffer bufferRes = new StringBuffer();
         while ((valueString = read.readLine()) != null) {
             bufferRes.append(valueString);
         }
         in.close();
         if (http != null) {
             http.disconnect();// 关闭连接
         }
         return bufferRes.toString();
     }
 
     public static String get(String url) throws Exception {
         return get(url, null);
     }
 
     public static String get(String url, Map<String, String> params)
             throws Exception {
         return get(url, params, null);
     }
 
     public static String post(String url, String params)
             throws Exception {
         HttpURLConnection http = null;
         if (isHttps(url)) {
             http = initHttps(url, _POST, null);
         } else {
             http = initHttp(url, _POST, null);
         }
         OutputStream out = http.getOutputStream();
         out.write(params.getBytes(DEFAULT_CHARSET));
         out.flush();
         out.close();
 
         InputStream in = http.getInputStream();
         BufferedReader read = new BufferedReader(new InputStreamReader(in,
                 DEFAULT_CHARSET));
        String valueString = null;
         StringBuffer bufferRes = new StringBuffer();
         while ((valueString = read.readLine()) != null) {
            bufferRes.append(valueString);
         }
         in.close();
         if (http != null) {
             http.disconnect();// 关闭连接
        }
         return bufferRes.toString();
     }
 
     /**
      * 功能描述: 构造请求参数
      * 
      * @return 返回类型:
      * @throws Exception
      */
     public static String initParams(String url, Map<String, String> params)
             throws Exception {
         if (null == params || params.isEmpty()) {
             return url;
         }
         StringBuilder sb = new StringBuilder(url);
         if (url.indexOf("?") == -1) {
             sb.append("?");
         }
         sb.append(map2Url(params));
         return sb.toString();
     }
 
     /**
     * map构造url
      * 
      * @return 返回类型:
      * @throws Exception
      */
     public static String map2Url(Map<String, String> paramToMap)
             throws Exception {
         if (null == paramToMap || paramToMap.isEmpty()) {
             return null;
         }
         StringBuffer url = new StringBuffer();
         boolean isfist = true;
         for (Entry<String, String> entry : paramToMap.entrySet()) {
            if (isfist) {
                isfist = false;
             } else {
                 url.append("&");
             }
             url.append(entry.getKey()).append("=");
             String value = entry.getValue();
             if (!StringUtils.isEmpty(value)) {
                 url.append(URLEncoder.encode(value, DEFAULT_CHARSET));
             }
         }
         return url.toString();
     }
 
     /**
      * 检测是否https
      * 
      * @param url
      */
    private static boolean isHttps(String url) {
         return url.startsWith("https");
     }
 
     /**
      * https 域名校验
      * 
      * @param url
      * @param params
      * @return
      */
     public class TrustAnyHostnameVerifier implements HostnameVerifier {
         public boolean verify(String hostname, SSLSession session) {
             return true;// 直接返回true
         }
     }
 }

/**
 * 证书信任管理器(用于https请求)
 * 
 */
public class MyX509TrustManager implements X509TrustManager {
	// 检查客户端证书
	public void checkClientTrusted(X509Certificate[] chain, String authType)
			throws CertificateException {
	}

	// 检查服务器端证书
	public void checkServerTrusted(X509Certificate[] chain, String authType)
			throws CertificateException {
	}

	// 返回受信任的x509数组
	public X509Certificate[] getAcceptedIssuers() {
		return null;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值