package doumeemes.core.utils;
|
|
import com.alibaba.fastjson.JSONObject;
|
import org.apache.http.HttpEntity;
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
import org.apache.http.client.methods.HttpGet;
|
import org.apache.http.client.methods.HttpPost;
|
import org.apache.http.conn.ssl.NoopHostnameVerifier;
|
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
|
import org.apache.http.entity.StringEntity;
|
import org.apache.http.impl.client.CloseableHttpClient;
|
import org.apache.http.impl.client.HttpClients;
|
import org.apache.http.ssl.SSLContexts;
|
import org.apache.http.util.EntityUtils;
|
import org.springframework.web.util.UriComponentsBuilder;
|
|
import javax.net.ssl.*;
|
import java.io.ByteArrayOutputStream;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
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);
|
}
|
|
|
public static String sendPostByHttps(String url, Map<String, String> body, String token) {
|
|
CloseableHttpResponse response = null;
|
// 处理请求路径
|
url = UriComponentsBuilder.fromHttpUrl(url)
|
.toUriString();
|
//创建httpclient对象
|
CloseableHttpClient client = null;
|
String respBody;
|
try {
|
client = HttpClients.custom()
|
.setSSLSocketFactory(new SSLConnectionSocketFactory(SSLContexts.custom()
|
//忽略掉对服务器端证书的校验
|
.loadTrustMaterial(null, new TrustSelfSignedStrategy())
|
.build(), NoopHostnameVerifier.INSTANCE))
|
.build();
|
//创建post方式请求对象
|
HttpPost httpPost = new HttpPost(url);
|
// 请求头设置
|
httpPost.setHeader("Accept", "*/*");
|
httpPost.setHeader("connection", "Keep-Alive");
|
httpPost.setHeader("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
|
httpPost.setHeader("Content-type", "application/json;charset=utf-8");
|
httpPost.setHeader("Authorization", token);//如果需要token请修改传入自己的token以及Authorization
|
// 情求体设置
|
if (body != null) {
|
httpPost.setEntity(new StringEntity(JSONObject.toJSONString(body), "utf-8"));
|
}
|
//执行请求操作,并拿到结果
|
response = client.execute(httpPost);
|
//获取结果实体
|
HttpEntity entity = response.getEntity();
|
if (entity != null) {
|
respBody = EntityUtils.toString(entity);
|
return respBody;
|
}
|
} catch (Exception e) {
|
} finally {
|
try {
|
if (client != null) {
|
client.close();
|
}
|
if (response != null) {
|
response.close();
|
}
|
} catch (IOException e) {
|
}
|
}
|
|
return null;
|
}
|
public static String sendGetByHttps(String url,String token) {
|
|
CloseableHttpResponse response = null;
|
// 处理请求路径
|
url = UriComponentsBuilder.fromHttpUrl(url)
|
.toUriString();
|
//创建httpclient对象
|
CloseableHttpClient client = null;
|
String respBody;
|
try {
|
client = HttpClients.custom()
|
.setSSLSocketFactory(new SSLConnectionSocketFactory(SSLContexts.custom()
|
//忽略掉对服务器端证书的校验
|
.loadTrustMaterial(null, new TrustSelfSignedStrategy())
|
.build(), NoopHostnameVerifier.INSTANCE))
|
.build();
|
//创建post方式请求对象
|
HttpGet httpPost = new HttpGet(url);
|
// 请求头设置
|
httpPost.setHeader("Accept", "*/*");
|
httpPost.setHeader("connection", "Keep-Alive");
|
httpPost.setHeader("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
|
httpPost.setHeader("Content-type", "application/json;charset=utf-8");
|
httpPost.setHeader("Authorization", token);//如果需要token请修改传入自己的token以及Authorization
|
|
//执行请求操作,并拿到结果
|
response = client.execute(httpPost);
|
//获取结果实体
|
HttpEntity entity = response.getEntity();
|
if (entity != null) {
|
respBody = EntityUtils.toString(entity);
|
return respBody;
|
}
|
} catch (Exception e) {
|
} finally {
|
try {
|
if (client != null) {
|
client.close();
|
}
|
if (response != null) {
|
response.close();
|
}
|
} catch (IOException e) {
|
}
|
}
|
|
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 void main(String[] args) {
|
//局部信任所有证书和主机
|
String result = HttpsUtil.sendGetByHttps("http://localhost/x_organization_assemble_express/jaxrs/person/63c288ff-f04d-4e63-b1b8-35071b13ad0e?x-token=B6oxLY3qj4QVaDvi7QiV5AcSIf_M1oiifPjFnXf7xOnFD0FL3f1lFhM2xIcT3GGMf3vrW27MZuMUAvXn08hwUmRiV20q5VtNEMYSA2ic85o",null);
|
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();
|
}
|
}
|
|
}
|