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;
|
import java.util.Map;
|
|
public class HttpsUtil {
|
|
public static String get(String url,boolean ignoreSSL) {
|
return connection(url, "GET", null, null,ignoreSSL,null);
|
}
|
|
public static String post(String url, String data, String contentType, boolean ignoreSSL) {
|
return connection(url, "POST", data, contentType, ignoreSSL,null);
|
}
|
public static String sendGet(String url) {
|
if(url.startsWith("https://")){
|
return connection(url, "GET", "", "text/plain; charset=utf-8", true,null);
|
}else{
|
return connectionHttp(url, "GET", "", "text/plain; charset=utf-8",null);
|
}
|
}
|
public static String postJson(String url, String data) {
|
if(url.startsWith("https://")){
|
return connection(url, "POST", data, "application/json", true,null);
|
}else{
|
return connectionHttp(url, "POST", data, "application/json",null);
|
}
|
}
|
public static String postJsonWithHeaders(String url, String data, Map<String,String> headers) {
|
if(url.startsWith("https://")){
|
return connection(url, "POST", data, "application/json", true,headers);
|
}else{
|
return connectionHttp(url, "POST", data, "application/json",headers);
|
}
|
}
|
|
public static String connection(String url,String method,String data,String contentType,boolean ignoreSSL, Map<String,String> headers){
|
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 (headers!=null && headers.size()>0) {
|
for (String s : headers.keySet()) {
|
connection.setRequestProperty(s, headers.get(s));
|
}
|
}
|
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, Map<String,String> headers){
|
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);
|
}
|
if (headers!=null && headers.size()>0) {
|
for (String s : headers.keySet()) {
|
connection.setRequestProperty(s, headers.get(s));
|
}
|
}
|
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();
|
}
|
}
|
|
}
|