|  |  |  | 
|---|
|  |  |  | package com.doumee.core.utils; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import org.apache.http.client.methods.CloseableHttpResponse; | 
|---|
|  |  |  | import org.apache.http.client.methods.HttpGet; | 
|---|
|  |  |  | import org.apache.http.client.utils.URIBuilder; | 
|---|
|  |  |  | import org.apache.http.impl.client.CloseableHttpClient; | 
|---|
|  |  |  | import org.apache.http.impl.client.HttpClients; | 
|---|
|  |  |  | import org.apache.http.util.EntityUtils; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import javax.net.ssl.*; | 
|---|
|  |  |  | import java.io.ByteArrayOutputStream; | 
|---|
|  |  |  | import java.io.IOException; | 
|---|
|  |  |  | import java.io.InputStream; | 
|---|
|  |  |  | import java.io.OutputStream; | 
|---|
|  |  |  | import java.net.URI; | 
|---|
|  |  |  | import java.net.HttpURLConnection; | 
|---|
|  |  |  | import java.net.URL; | 
|---|
|  |  |  | import java.security.KeyManagementException; | 
|---|
|  |  |  | import java.security.NoSuchAlgorithmException; | 
|---|
|  |  |  | import java.security.SecureRandom; | 
|---|
|  |  |  | import java.security.cert.CertificateException; | 
|---|
|  |  |  | import java.security.cert.X509Certificate; | 
|---|
|  |  |  | import java.util.Map; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public class HttpsUtil { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | public static String post(String url, String data, String contentType, boolean ignoreSSL) { | 
|---|
|  |  |  | return connection(url, "POST", data, contentType, ignoreSSL); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | public static String postJsonString(String url, String data) { | 
|---|
|  |  |  | if(url.startsWith("https://")){ | 
|---|
|  |  |  | return connection(url, "POST", data, "application/json", true); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | return connectionHttp(url, "POST", data, "application/json"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static String connection(String url,String method,String data,String contentType,boolean ignoreSSL){ | 
|---|
|  |  |  | HttpsURLConnection connection = null; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | public static InputStream connectionInputsteam(String url,String method,String data,String contentType ){ | 
|---|
|  |  |  | HttpURLConnection connection = null; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | URL _url = new URL(url); | 
|---|
|  |  |  | connection = (HttpURLConnection) _url.openConnection(); | 
|---|
|  |  |  | connection.setRequestMethod(method); | 
|---|
|  |  |  | connection.setDoOutput(true); | 
|---|
|  |  |  | connection.setDoInput(true); | 
|---|
|  |  |  | connection.setUseCaches(false); | 
|---|
|  |  |  | if(contentType != null){ | 
|---|
|  |  |  | connection.setRequestProperty("Content-Type", contentType); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | connection.connect(); | 
|---|
|  |  |  | if(data != null){ | 
|---|
|  |  |  | OutputStream outputStream = connection.getOutputStream(); | 
|---|
|  |  |  | outputStream.write(data.getBytes("utf-8")); | 
|---|
|  |  |  | outputStream.close(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | int responseCode = connection.getResponseCode(); | 
|---|
|  |  |  | if (responseCode == HttpsURLConnection.HTTP_OK) { | 
|---|
|  |  |  | return  connection.getInputStream(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } finally { | 
|---|
|  |  |  | if(connection != null){ | 
|---|
|  |  |  | connection.disconnect(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | public static String connectionHttp(String url,String method,String data,String contentType ){ | 
|---|
|  |  |  | HttpURLConnection connection = null; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | URL _url = new URL(url); | 
|---|
|  |  |  | connection = (HttpURLConnection) _url.openConnection(); | 
|---|
|  |  |  | connection.setRequestMethod(method); | 
|---|
|  |  |  | connection.setDoOutput(true); | 
|---|
|  |  |  | connection.setDoInput(true); | 
|---|
|  |  |  | connection.setUseCaches(false); | 
|---|
|  |  |  | if(contentType != null){ | 
|---|
|  |  |  | connection.setRequestProperty("Content-Type", contentType); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | connection.connect(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(data != null){ | 
|---|
|  |  |  | OutputStream outputStream = connection.getOutputStream(); | 
|---|
|  |  |  | outputStream.write(data.getBytes("utf-8")); | 
|---|
|  |  |  | outputStream.close(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int responseCode = connection.getResponseCode(); | 
|---|
|  |  |  | if (responseCode == HttpsURLConnection.HTTP_OK) { | 
|---|
|  |  |  | InputStream is = connection.getInputStream(); | 
|---|
|  |  |  | byte[] b = new byte[4096]; | 
|---|
|  |  |  | ByteArrayOutputStream baos = new ByteArrayOutputStream(b.length); | 
|---|
|  |  |  | int len; | 
|---|
|  |  |  | while ((len = is.read(b)) != -1) { | 
|---|
|  |  |  | baos.write(b, 0, len); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | is.close(); | 
|---|
|  |  |  | return baos.toString("utf-8"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return connection.getResponseMessage(); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } finally { | 
|---|
|  |  |  | if(connection != null){ | 
|---|
|  |  |  | connection.disconnect(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static void main(String[] args) { | 
|---|
|  |  |  | //局部信任所有证书和主机 | 
|---|
|  |  |  | String result = HttpsUtil.get("https://127.0.0.1:8443/ssl-test/test01.do",true); | 
|---|
|  |  |  | System.out.println(result); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //外部信任所有证书和主机 | 
|---|
|  |  |  | HttpsTrustManager.allowAllSSL(); | 
|---|
|  |  |  | String response = HttpsUtil.get("https://127.0.0.1:8443/ssl-test/test01.do", false); | 
|---|
|  |  |  | System.out.println(result); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | public static InputStream postJson(String url, String data){ | 
|---|
|  |  |  | HttpsURLConnection connection = null; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } finally { | 
|---|
|  |  |  | if(connection != null){ | 
|---|
|  |  |  | //     connection.disconnect(); | 
|---|
|  |  |  | //     connection.disconnect(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 发送get请求 | 
|---|
|  |  |  | * @param url 请求URL | 
|---|
|  |  |  | * @param param 请求参数 key:value url携带参数 或者无参可不填 | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static  String doGet(String url, Map<String, String> param) { | 
|---|
|  |  |  | // 创建Httpclient对象 | 
|---|
|  |  |  | CloseableHttpClient httpclient = HttpClients.createDefault(); | 
|---|
|  |  |  | String resultString = ""; | 
|---|
|  |  |  | CloseableHttpResponse response = null; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 创建uri | 
|---|
|  |  |  | URIBuilder builder = new URIBuilder(url); | 
|---|
|  |  |  | if (param != null) { | 
|---|
|  |  |  | for (String key : param.keySet()) { | 
|---|
|  |  |  | builder.addParameter(key, param.get(key)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | URI uri = builder.build(); | 
|---|
|  |  |  | // 创建http GET请求 | 
|---|
|  |  |  | HttpGet httpGet = new HttpGet(uri); | 
|---|
|  |  |  | // 执行请求 | 
|---|
|  |  |  | response = httpclient.execute(httpGet); | 
|---|
|  |  |  | // 判断返回状态是否为200 | 
|---|
|  |  |  | if (response.getStatusLine().getStatusCode() == 200) { | 
|---|
|  |  |  | resultString = EntityUtils.toString(response.getEntity(), "UTF-8"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } finally { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | if (response != null) { | 
|---|
|  |  |  | response.close(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | httpclient.close(); | 
|---|
|  |  |  | } catch (IOException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return resultString; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static void main(String[] args) { | 
|---|
|  |  |  | //局部信任所有证书和主机 | 
|---|
|  |  |  | String result = HttpsUtil.get("https://127.0.0.1:8443/ssl-test/test01.do",true); | 
|---|
|  |  |  | System.out.println(result); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //外部信任所有证书和主机 | 
|---|
|  |  |  | HttpsTrustManager.allowAllSSL(); | 
|---|
|  |  |  | String response = HttpsUtil.get("https://127.0.0.1:8443/ssl-test/test01.do", false); | 
|---|
|  |  |  | System.out.println(result); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|