package com.doumee.core.utils;
|
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.http.HttpEntity;
|
import org.apache.http.ParseException;
|
import org.apache.http.auth.AuthScope;
|
import org.apache.http.auth.UsernamePasswordCredentials;
|
import org.apache.http.client.ClientProtocolException;
|
import org.apache.http.client.CredentialsProvider;
|
import org.apache.http.client.config.RequestConfig;
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
import org.apache.http.client.methods.HttpDelete;
|
import org.apache.http.client.methods.HttpPost;
|
import org.apache.http.client.methods.HttpRequestBase;
|
import org.apache.http.entity.StringEntity;
|
import org.apache.http.impl.client.BasicCredentialsProvider;
|
import org.apache.http.impl.client.CloseableHttpClient;
|
import org.apache.http.impl.client.HttpClients;
|
import org.apache.http.util.EntityUtils;
|
import org.springframework.http.HttpMethod;
|
|
import javax.net.ssl.*;
|
import java.io.*;
|
import java.net.HttpURLConnection;
|
import java.net.URI;
|
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;
|
@Slf4j
|
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");
|
}
|
}
|
private static final int CONNECT_TIMEOUT =10000;// 设置连接建立的超时时间为10s
|
private static final int SOCKET_TIMEOUT = 10000;//socket读写超时时间(单位毫秒)
|
|
private static void setRequestConfig(HttpRequestBase httpRequestBase) {
|
RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(CONNECT_TIMEOUT)
|
.setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
|
httpRequestBase.setConfig(requestConfig);
|
}
|
|
public static String doPostHk(String host,int port,String UserName,String Password,String url, String Input) {
|
try {
|
CloseableHttpResponse responseBody = null;
|
HttpPost httpPost = new HttpPost("http://"+host+":"+port+url);
|
setRequestConfig(httpPost);
|
httpPost.setEntity(new StringEntity(Input, "UTF-8"));
|
CredentialsProvider credsProvider = new BasicCredentialsProvider();
|
credsProvider.setCredentials(new AuthScope(host, port),
|
new UsernamePasswordCredentials(UserName, Password));
|
CloseableHttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
|
|
String response = "";
|
|
// 由客户端执行(发送)Post请求
|
responseBody = httpClient.execute(httpPost);
|
// 从响应模型中获取响应实体
|
HttpEntity responseEntity = responseBody.getEntity();
|
log.error("doPostHk响应状态为:" + responseBody.getStatusLine());
|
if (responseBody.getStatusLine().getStatusCode() == 302){
|
String redirectLocation = responseBody.getHeaders("Location")[0].getValue();
|
log.error("doPostHkRedirected to: " + redirectLocation);
|
// 在这里,你可以发送一个新的请求到redirectLocation
|
httpPost.setURI(URI.create(redirectLocation));
|
CloseableHttpResponse responseBody2 = httpClient.execute(httpPost);
|
log.error("doPostHk重定向后响应状态为:" + responseBody2.getStatusLine());
|
HttpEntity responseEntity2 = responseBody2.getEntity();
|
log.error("doPostHk重定向后响应内容长度为:" + responseEntity2.getContentLength());
|
response = EntityUtils.toString(responseEntity2);
|
log.error("doPostHk重定向后响应内容为:\n" + response);
|
responseBody2.close();
|
return response;
|
}else {
|
if (responseEntity != null) {
|
log.error("doPostHk响应内容长度为:" + responseEntity.getContentLength());
|
response = EntityUtils.toString(responseEntity);
|
log.error("doPostHk响应内容为:\n" + response);
|
return response;
|
}
|
}
|
if (httpClient != null) {
|
httpClient.close();
|
}
|
if (responseBody != null) {
|
responseBody.close();
|
}
|
} catch (Exception e) {
|
log.error("doPostHk发起请求异常:\n" + e.getMessage());
|
}
|
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.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) {
|
return connection.getInputStream();
|
}
|
} 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 ){
|
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) throws IOException {
|
//局部信任所有证书和主机
|
InputStream result = HttpsUtil.connectionInputsteam(
|
"https://atwl.ahzyssl.com/zhyq_ftp/company_documents/20250630/e4205bc2-c5d3-48c7-ae2e-9690c009e481.txt",
|
"GET",null,null );
|
try (BufferedInputStream bufferedInputStream = new BufferedInputStream(result);
|
FileOutputStream outputStream = new FileOutputStream("D://temp.txt")) {
|
byte[] buffer = new byte[1024];
|
int bytesRead;
|
while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
|
outputStream.write(buffer, 0, bytesRead);
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
}
|
}
|
|
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();
|
}
|
}
|
|
}
|