package doumeemes.core.utils; import com.alibaba.fastjson.JSONObject; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.TrustSelfSignedStrategy; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.SSLContexts; import org.apache.http.util.EntityUtils; import org.springframework.web.util.UriComponentsBuilder; import javax.net.ssl.*; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; 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 get(String url,boolean ignoreSSL) { return connection(url, "GET", null, null,ignoreSSL); } public static String sendPostByHttps(String url, Map body, String token) { CloseableHttpResponse response = null; // 处理请求路径 url = UriComponentsBuilder.fromHttpUrl(url) .toUriString(); //创建httpclient对象 CloseableHttpClient client = null; String respBody; try { client = HttpClients.custom() .setSSLSocketFactory(new SSLConnectionSocketFactory(SSLContexts.custom() //忽略掉对服务器端证书的校验 .loadTrustMaterial(null, new TrustSelfSignedStrategy()) .build(), NoopHostnameVerifier.INSTANCE)) .build(); //创建post方式请求对象 HttpPost httpPost = new HttpPost(url); // 请求头设置 httpPost.setHeader("Accept", "*/*"); httpPost.setHeader("connection", "Keep-Alive"); httpPost.setHeader("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); httpPost.setHeader("Content-type", "application/json;charset=utf-8"); httpPost.setHeader("Authorization", token);//如果需要token请修改传入自己的token以及Authorization // 情求体设置 if (body != null) { httpPost.setEntity(new StringEntity(JSONObject.toJSONString(body), "utf-8")); } //执行请求操作,并拿到结果 response = client.execute(httpPost); //获取结果实体 HttpEntity entity = response.getEntity(); if (entity != null) { respBody = EntityUtils.toString(entity); return respBody; } } catch (Exception e) { } finally { try { if (client != null) { client.close(); } if (response != null) { response.close(); } } catch (IOException e) { } } return null; } public static String sendGetByHttps(String url,String token) { CloseableHttpResponse response = null; // 处理请求路径 url = UriComponentsBuilder.fromHttpUrl(url) .toUriString(); //创建httpclient对象 CloseableHttpClient client = null; String respBody; try { client = HttpClients.custom() .setSSLSocketFactory(new SSLConnectionSocketFactory(SSLContexts.custom() //忽略掉对服务器端证书的校验 .loadTrustMaterial(null, new TrustSelfSignedStrategy()) .build(), NoopHostnameVerifier.INSTANCE)) .build(); //创建post方式请求对象 HttpGet httpPost = new HttpGet(url); // 请求头设置 httpPost.setHeader("Accept", "*/*"); httpPost.setHeader("connection", "Keep-Alive"); httpPost.setHeader("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); httpPost.setHeader("Content-type", "application/json;charset=utf-8"); httpPost.setHeader("Authorization", token);//如果需要token请修改传入自己的token以及Authorization //执行请求操作,并拿到结果 response = client.execute(httpPost); //获取结果实体 HttpEntity entity = response.getEntity(); if (entity != null) { respBody = EntityUtils.toString(entity); return respBody; } } catch (Exception e) { } finally { try { if (client != null) { client.close(); } if (response != null) { response.close(); } } catch (IOException e) { } } return null; } public static String connection(String url,String method,String data,String contentType,boolean ignoreSSL){ HttpsURLConnection connection = null; try { URL _url = new URL(url); connection = (HttpsURLConnection) _url.openConnection(); connection.setRequestMethod(method); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); if(contentType != null){ connection.setRequestProperty("Content-Type", contentType); } if(ignoreSSL){ //信任所有ssl证书和主机 TrustManager[] trustManagers = {new HttpsTrustManager()}; SSLContext context = SSLContext.getInstance("TLS"); context.init(null, trustManagers, new SecureRandom()); connection.setSSLSocketFactory(context.getSocketFactory()); connection.setHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }); } 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.sendGetByHttps("http://localhost/x_organization_assemble_express/jaxrs/person/63c288ff-f04d-4e63-b1b8-35071b13ad0e?x-token=B6oxLY3qj4QVaDvi7QiV5AcSIf_M1oiifPjFnXf7xOnFD0FL3f1lFhM2xIcT3GGMf3vrW27MZuMUAvXn08hwUmRiV20q5VtNEMYSA2ic85o",null); System.out.println(result); } } class HttpsTrustManager implements X509TrustManager { private static TrustManager[] trustManagers = {new HttpsTrustManager()}; @Override public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { // TODO Auto-generated method stub } @Override public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { // TODO Auto-generated method stub } @Override public X509Certificate[] getAcceptedIssuers() { // TODO Auto-generated method stub return null; } public static void allowAllSSL() { try { SSLContext context = SSLContext.getInstance("TLS"); context.init(null, trustManagers, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory()); HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }); } catch (NoSuchAlgorithmException | KeyManagementException e) { e.printStackTrace(); } } }