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.*; 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 doPutHk(String host,int port,String UserName,String Password,String url, String Input) { try { CloseableHttpResponse responseBody = null; HttpPut httpPut = new HttpPut("http://"+host+":"+port+url); log.error("====================海康isapi接口:http://"+host+":"+port+url); httpPut.setHeader("Content-Type", "application/json"); setRequestConfig(httpPut); httpPut.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(httpPut); // 从响应模型中获取响应实体 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 httpPut.setURI(URI.create(redirectLocation)); CloseableHttpResponse responseBody2 = httpClient.execute(httpPut); 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(); } } }