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