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