package com.doumee.core.utils; 
 | 
  
 | 
import javax.net.ssl.*; 
 | 
import java.io.ByteArrayOutputStream; 
 | 
import java.io.InputStream; 
 | 
import java.io.OutputStream; 
 | 
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; 
 | 
  
 | 
public class HttpsUtil { 
 | 
  
 | 
    public static String get(String url,boolean ignoreSSL) { 
 | 
        return connection(url, "GET", null, null,ignoreSSL); 
 | 
    } 
 | 
  
 | 
    public static String post(String url, String data, String contentType, boolean ignoreSSL) { 
 | 
        return connection(url, "POST", data, contentType, ignoreSSL); 
 | 
    } 
 | 
    public static String postJson(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 { 
 | 
            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 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); 
 | 
  
 | 
    } 
 | 
} 
 | 
  
 | 
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(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 |