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<String, String> 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(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 |