doum
19 小时以前 f67e78a754fb8d7364d35aaafb0295690a4cc810
server/system_service/src/main/java/com/doumee/core/utils/HttpsUtil.java
@@ -1,19 +1,35 @@
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.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
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) {
@@ -29,6 +45,65 @@
        }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){
@@ -101,15 +176,12 @@
            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();
@@ -117,9 +189,10 @@
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(connection != null){
                connection.disconnect();
            }
//            if(connection != null){
//                connection.disconnect();
//            }
        }
        return null;
    }
@@ -168,16 +241,21 @@
    }
    public static void main(String[] args) {
    public static void main(String[] args) throws IOException {
        //局部信任所有证书和主机
        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);
        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();
        }
    }
}