package com.doumee.core.utils; 
 | 
  
 | 
import javax.net.ssl.*; 
 | 
import java.io.*; 
 | 
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 uploadTempMedia(String urlString ,String fileUrl){ 
 | 
        HttpsURLConnection conn= null; 
 | 
        try { 
 | 
            String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1); 
 | 
            // 获取网络图片 
 | 
            URL mediaUrl = new URL(fileUrl); 
 | 
            HttpURLConnection meidaConn = (HttpURLConnection) mediaUrl.openConnection(); 
 | 
            meidaConn.setDoOutput(true); 
 | 
            meidaConn.setRequestMethod("GET"); 
 | 
  
 | 
            String result = null; 
 | 
            URL url=new URL(urlString); 
 | 
            conn=(HttpsURLConnection) url.openConnection(); 
 | 
            conn.setRequestMethod("POST");//以POST方式提交表单 
 | 
            conn.setDoInput(true); 
 | 
            conn.setDoOutput(true); 
 | 
            conn.setUseCaches(false);//POST方式不能使用缓存 
 | 
            //设置请求头信息 
 | 
            conn.setRequestProperty("Connection", "Keep-Alive"); 
 | 
            conn.setRequestProperty("Charset", "UTF-8"); 
 | 
            //设置边界 
 | 
            String BOUNDARY="----------"+System.currentTimeMillis(); 
 | 
            conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); 
 | 
            //请求正文信息 
 | 
            //第一部分 
 | 
            StringBuilder sb=new StringBuilder(); 
 | 
            sb.append("--");//必须多两条道 
 | 
            sb.append(BOUNDARY); 
 | 
            sb.append("\r\n"); 
 | 
            sb.append("Content-Disposition: form-data;name=\"media\"; filename=\"" + fileName+"\"\r\n"); 
 | 
  
 | 
            sb.append("Content-Type:application/octet-stream\r\n\r\n"); 
 | 
            System.out.println("sb:"+sb); 
 | 
  
 | 
            //获得输出流 
 | 
            OutputStream out=new DataOutputStream(conn.getOutputStream()); 
 | 
            //输出表头 
 | 
            out.write(sb.toString().getBytes("UTF-8")); 
 | 
            //文件正文部分 
 | 
            //把文件以流的方式 推送道URL中 
 | 
            DataInputStream din=new DataInputStream(meidaConn.getInputStream()); 
 | 
            int bytes=0; 
 | 
            byte[] buffer=new byte[1024]; 
 | 
            while((bytes=din.read(buffer))!=-1){ 
 | 
                out.write(buffer,0,bytes); 
 | 
            } 
 | 
            din.close(); 
 | 
            //结尾部分 
 | 
            byte[] foot=("\r\n--" + BOUNDARY + "--\r\n").getBytes("UTF-8");//定义数据最后分割线 
 | 
            out.write(foot); 
 | 
            out.flush(); 
 | 
            out.close(); 
 | 
            if(HttpsURLConnection.HTTP_OK==conn.getResponseCode()){ 
 | 
                InputStream is = conn.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 result; 
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
        } finally { 
 | 
            if(conn != null){ 
 | 
                conn.disconnect(); 
 | 
            } 
 | 
        } 
 | 
        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 InputStream connectionInputsteam(String url,String method,String data,String contentType ){ 
 | 
        HttpURLConnection connection = null; 
 | 
        try { 
 | 
            URL _url = new URL(url); 
 | 
            connection = (HttpURLConnection) _url.openConnection(); 
 | 
            connection.setDoOutput(true); 
 | 
            connection.setRequestMethod("GET"); 
 | 
            return connection.getInputStream(); 
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        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(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 |