Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

Qchen před 11 měsíci
rodič
revize
88375e70fd

+ 145 - 26
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/component/HtCrawlerRequestComponent.java

@@ -18,11 +18,12 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 
-import java.time.Duration;
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 /**
  * @description:
@@ -39,6 +40,8 @@ public class HtCrawlerRequestComponent {
 
     private final RedissonClient redissonClient;
 
+    private final HuaTaiCrawlerCacheComponent huaTaiCrawlerCacheComponent;
+
     /**
      * 登录
      * @param username
@@ -47,22 +50,27 @@ public class HtCrawlerRequestComponent {
      * @param loginsNumber
      * @return
      */
-    public List<String> authenticate(String username, String password, String comcode, int loginsNumber) {
+    public String authenticate(String username, String password, String comcode, int loginsNumber) {
+        String haTaiCookie = getHaTaiCookie(RequestUrl.NE_COOKIE.getRequestUrl(huaTaiCrawlerProperties.getBaseUrl()));
+        System.out.println(haTaiCookie);
         HtCrawlerLoginRequest htCrawlerLoginRequest = new HtCrawlerLoginRequest(username, password, comcode);
-        ResponseEntity<HtCrawlerLoginResponse> loginResponseEntity = requestComponent.objectPost(RequestUrl.AUTHENTICATE.getRequestUrl(huaTaiCrawlerProperties.getBaseUrl()), htCrawlerLoginRequest, HtCrawlerLoginResponse.class);
-        List<String> cookies = loginResponseEntity.getHeaders().get("Set-Cookie");
-        if (cookies != null && !cookies.isEmpty()) {
-            Map<String, Object> authorizationMap = buildCache(loginResponseEntity);
-            RMap<Object, Object> map = redissonClient.getMap(CacheConstant.HENGBANG_AUTHORIZATION + username);
-            map.putAll(authorizationMap);
-            map.expire(Duration.ofDays(CacheConstant.GR_SPECIAL_AGREEMENT_TIME));
-            return (List<String>) authorizationMap.get(HtRequestConstant.COOKIE);
-        }
-        loginsNumber = loginsNumber - 1;
-        if (loginsNumber <= 0) {
-            throw new SystemException("华泰财险登录异常");
-        }
-        return authenticate(username, password, comcode, loginsNumber);
+        HttpHeaders httpHeaders = getHeaders();
+        httpHeaders.add("referer",RequestUrl.COOKIE.getUrl());
+        ResponseEntity<String> loginResponseEntity = requestComponent.objectPost(RequestUrl.NE_AUTHENTICATE.getRequestUrl(huaTaiCrawlerProperties.getBaseUrl()), htCrawlerLoginRequest, String.class,httpHeaders);
+        System.out.println(loginResponseEntity);
+        return  loginResponseEntity.getBody();
+    }
+
+    /**
+     * session_keep
+     * @return
+     */
+    public String sessionKeep(String referer){
+        HttpHeaders httpHeaders = getHeaders();
+        httpHeaders.add("referer",referer);
+        String response = requestComponent.get(RequestUrl.NE_SESSION_KEEP.getRequestUrl(huaTaiCrawlerProperties.getBaseUrl()),null,null, String.class,httpHeaders);
+        System.out.println(response);
+        return response;
     }
 
     public Map<String, Object> buildCache(ResponseEntity<HtCrawlerLoginResponse> loginResponseEntity) {
@@ -74,24 +82,135 @@ public class HtCrawlerRequestComponent {
 
     /**
      * 获取cookie
-     * @param username
      * @return
      */
-    public List<String> getCookie(String username) {
-        return (List<String>) redissonClient.getMap(CacheConstant.HUATAI_AUTHORIZATION + username).get(HtRequestConstant.COOKIE);
+    public String getCookie() {
+        return  huaTaiCrawlerCacheComponent.getCookie();
+    }
+
+    public String  getHaTaiCookie(String link) {
+        try {
+            // 请求头设置
+            String[] headers = {
+                    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
+                    "Accept-Language: zh-CN,zh;q=0.9,en;q=0.8",
+                    "Cache-Control: no-cache",
+                    "Connection: keep-alive",
+                    "Pragma: no-cache",
+                    "Upgrade-Insecure-Requests: 1",
+                    "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
+            };
+            // 创建URL对象
+            URL url = new URL(link);
+
+            // 打开连接
+            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+
+            // 设置请求方法为GET
+            connection.setRequestMethod("GET");
+            // 添加请求头
+            for (String header : headers) {
+                String[] parts = header.split(":", 2);
+                if (parts.length == 2) {
+                    connection.setRequestProperty(parts[0].trim(), parts[1].trim());
+                }
+            }
+
+            // 获取响应码
+            int responseCode = connection.getResponseCode();
+//            Map<String, List<String>> requestProperties = connection.getRequestProperties();
+//            String cookie1 = connection.getRequestProperty("Cookie");
+            System.out.println("响应码: " + responseCode);
+
+            // 获取所有响应头
+            Map<String, List<String>> headersList = connection.getHeaderFields();
+            StringBuilder builder = new StringBuilder();
+            // 检查并获取Cookie
+            if (headersList.containsKey("Set-Cookie")) {
+                List<String> cookies = headersList.get("Set-Cookie");
+                System.out.println("获取到的Cookie:");
+                String s = cookies.get(0).split(";")[0];
+                String s1 = cookies.get(1).split(";")[0];
+                builder.append(s1).append(";").append(s);
+                huaTaiCrawlerCacheComponent.cacheCookie(builder.toString());
+                return builder.toString();
+            } else {
+                System.out.println("响应头中没有找到Cookie");
+            }
+
+            // 关闭连接
+            connection.disconnect();
+
+        } catch (IOException e) {
+            System.err.println("请求过程中发生错误: " + e.getMessage());
+            e.printStackTrace();
+        }
+
+        // 创建WebClient实例
+//        WebClient webClient = WebClient.create();
+//
+//        // 发送GET请求,获取完整响应(包括响应头)
+//        Mono<ClientResponse> responseMono = webClient.get()
+//                .uri("http://127.0.0.1/ht")
+//                .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7")
+//                .header("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
+//                .header("Cache-Control", "no-cache")
+//                .header("Connection", "keep-alive")
+//                .header("Pragma", "no-cache")
+//                .header("Upgrade-Insecure-Requests", "1")
+//                .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36")
+//                .exchangeToMono(response -> Mono.just(response));
+//
+//        // 阻塞获取完整响应
+//        ClientResponse response = responseMono.block();
+//
+//        if (response != null) {
+//            // 获取响应状态码
+//            System.out.println("响应状态码: " + response.statusCode());
+//
+//            // 获取响应头中的Cookie
+//            HttpHeaders headers = response.headers().asHttpHeaders();
+//            List<String> cookies = headers.get("Set-Cookie");
+//
+//            if (cookies != null && !cookies.isEmpty()) {
+//                System.out.println("获取到的Cookie:");
+//                for (String cookie : cookies) {
+//                    System.out.println(cookie);
+//                }
+//                return cookies;
+//            } else {
+//                System.out.println("响应头中没有Cookie");
+//            }
+//
+//            // 读取响应体
+//            String responseBody = response.bodyToMono(String.class).block();
+//            System.out.println("\n响应体内容: " + responseBody);
+//        }
+
+        return null;
     }
 
     /**
      * 获取请求头
      * @return
      */
-    public HttpHeaders getHeaders(String username, String password, String comcode) {
-        List<String> cookie = getCookie(username);
-        if (cookie == null || cookie.isEmpty()) {
-            cookie = authenticate(username, password, comcode, HtRequestConstant.REQUEST_NUMBER);
+    public HttpHeaders getHeaders() {
+        String cookie = getCookie();
+        if (cookie.isEmpty()) {
+            cookie = getHaTaiCookie(RequestUrl.NE_COOKIE.getRequestUrl(huaTaiCrawlerProperties.getBaseUrl()));
         }
         HttpHeaders headers = new HttpHeaders();
-        headers.add(HtRequestConstant.COOKIE, cookie.stream().collect(Collectors.joining(";")));
+        headers.add(HtRequestConstant.COOKIE, cookie);
+        headers.add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7");
+        headers.add("Accept-Language","zh-CN,zh;q=0.9,en;q=0.8");
+        headers.add("Cache-Control", "no-cache");
+        headers.add("Connection","keep-alive");
+        headers.add("Content-Type", "application/x-www-form-urlencoded");
+        headers.add("Origin", "http://172.16.100.27:9000");
+        headers.add("Pragma", "no-cache");
+        headers.add("Upgrade-Insecure-Requests", "1");
+        headers.add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36");
+
         return headers;
     }
 
@@ -102,7 +221,7 @@ public class HtCrawlerRequestComponent {
      * @return
      */
     public HtCrawlerCarQueryResponse.DataDTO carQuery(HtCrawlerCarQueryRequest htCrawlerCarQueryRequest, HttpHeaders headers) throws Exception {
-        ResponseEntity<HtCrawlerCarQueryResponse> carQueryResponseEntity = requestComponent.objectPost(RequestUrl.CAR_QUERY.getRequestUrl(huaTaiCrawlerProperties.getBaseUrl()), htCrawlerCarQueryRequest, HtCrawlerCarQueryResponse.class, headers);
+        ResponseEntity<HtCrawlerCarQueryResponse> carQueryResponseEntity = requestComponent.objectPost(RequestUrl.NE_CAR_QUERY.getRequestUrl(huaTaiCrawlerProperties.getBaseUrl()), htCrawlerCarQueryRequest, HtCrawlerCarQueryResponse.class, headers);
         HtCrawlerCarQueryResponse carQueryResponse = carQueryResponseEntity.getBody();
         String decryptKey = HuaTaiCryptUtil.RSADecrypt(carQueryResponse.getAccessToken());
         String decryptData = HuaTaiCryptUtil.AESDecrypt(carQueryResponse.getData(), decryptKey);

+ 37 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/component/HuaTaiCrawlerCacheComponent.java

@@ -0,0 +1,37 @@
+package com.jzg.quotation.huatai.crawler.component;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RMap;
+import org.redisson.api.RedissonClient;
+import org.springframework.stereotype.Component;
+
+import java.time.Duration;
+import java.util.HashMap;
+import java.util.Map;
+
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class HuaTaiCrawlerCacheComponent {
+
+    private final RedissonClient redissonClient;
+
+    public static final String HUATAI_COOKIE = "huatai:cookie:";
+
+    public static final String COOKIE = "Cookie:";
+
+    public void cacheCookie(String cookie) {
+        Map<String, String> authorizationMap = new HashMap<>();
+
+        authorizationMap.put(COOKIE, cookie);
+        RMap<Object, Object> map = redissonClient.getMap(HUATAI_COOKIE);
+        map.putAll(authorizationMap);
+        map.expire(Duration.ofHours(3L));
+    }
+
+    public String getCookie() {
+        return (String) redissonClient.getMap(HUATAI_COOKIE).get(COOKIE);
+    }
+
+}

+ 26 - 10
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/constant/enums/RequestUrl.java

@@ -12,22 +12,38 @@ import lombok.Getter;
 @AllArgsConstructor
 @Getter
 public enum RequestUrl implements CrawlerRequestUrlStandard {
-    AUTHENTICATE("/htcsp/ShakeHandsAction.do?cmd=loginWelcom", "登录"),
 
-    CAR_QUERY("/htcsp/VehicleInfoEntryAction.do?cmd=carquery", "车型查询"),
-    SAVE_ONE_STEP("/htcsp/VehicleInfoEntryAction.do?cmd=saveOneStept", "保存车辆信息和车主等信息"),
-    QUOTE_PRICE("/htcsp/VehicleInfoEntryAction.do?cmd=carquery", "报价"),
+    NE_COOKIE("/htcsp", "获取cookie"),
+    COOKIE("http://172.16.100.37:9999/htcsp", "获取cookie"),
 
-    GET_UPLOAD_URL("/htcsp/UploadAction.do?cmd=getUploadUrl", "获取影像上传路径"),
-    UPLOAD("/app/ImgFileUpload/upload.do", "影像上传"),
+    NE_SESSION_KEEP("sessionKeep", "session连接"),
 
-    SUBMIT("/htcsp/checkInsAction.do?cmd=submit4ajax&SS=SS", "提交核保"),
+    SESSION_KEEP("http://172.16.100.27:9000/htcsp/ShakeHandsAction.do?cmd=contentInit", "session连接"),
 
-    ORDER_STATE("/htcsp/QuotationQueryAction.do?cmd=quotationListAll", "查询订单状态"),
+    NE_AUTHENTICATE("/login", "登录"),
 
-    PAYMENT_LINK("/htcsp/PaymentAction.do?cmd=Sendelectronicprop", "获取支付链接"),
+    AUTHENTICATE("http://172.16.100.37:9999/htcsp/ShakeHandsAction.do?cmd=loginWelcom", "登录"),
 
-    DOWNLOAD_POLICY("/htcsp/DocumentPrintAction.do?cmd=electronicPolicyEndorseDownload", "下载保单"),
+    NE_CAR_QUERY("/carquery", "车型查询"),
+
+    CAR_QUERY("http://172.16.100.37:9999/htcsp/VehicleInfoEntryAction.do?cmd=carquery", "车型查询"),
+
+    NE_SAVE_ONE_STEP("/saveOneStept", "保存车辆信息和车主等信息"),
+    SAVE_ONE_STEP("http://172.16.100.37:9999/htcsp/VehicleInfoEntryAction.do?cmd=saveOneStept", "保存车辆信息和车主等信息"),
+
+    NE_QUOTE_PRICE("/quotation", "报价"),
+    QUOTE_PRICE("http://172.16.100.37:9999/htcsp/VehicleInfoEntryAction.do?cmd=carquery", "报价"),
+
+    GET_UPLOAD_URL("http://172.16.100.37:9999/htcsp/UploadAction.do?cmd=getUploadUrl", "获取影像上传路径"),
+    UPLOAD("http://172.16.100.37:9999/app/ImgFileUpload/upload.do", "影像上传"),
+
+    SUBMIT("http://172.16.100.37:9999/htcsp/checkInsAction.do?cmd=submit4ajax&SS=SS", "提交核保"),
+
+    ORDER_STATE("http://172.16.100.37:9999/htcsp/QuotationQueryAction.do?cmd=quotationListAll", "查询订单状态"),
+
+    PAYMENT_LINK("http://172.16.100.37:9999/htcsp/PaymentAction.do?cmd=Sendelectronicprop", "获取支付链接"),
+
+    DOWNLOAD_POLICY("http://172.16.100.37:9999/htcsp/DocumentPrintAction.do?cmd=electronicPolicyEndorseDownload", "下载保单"),
     ;
 
     private final String url;

+ 33 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/entity/vo/LoginVPNResult.java

@@ -0,0 +1,33 @@
+package com.jzg.quotation.huatai.crawler.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+
+@Data
+public class LoginVPNResult {
+
+    @Serial
+    private static final long serialVersionUID = -1L;
+    private boolean success;
+    private String errorMessage;
+    private String sessionInfo;
+
+    public LoginVPNResult(boolean success, String errorMessage, String sessionInfo) {
+        this.success = success;
+        this.errorMessage = errorMessage;
+        this.sessionInfo = sessionInfo;
+    }
+
+    public boolean isSuccess() {
+        return success;
+    }
+
+    public String getErrorMessage() {
+        return errorMessage;
+    }
+
+    public String getSessionInfo() {
+        return sessionInfo;
+    }
+}

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 26 - 8
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/service/Impl/HuaTaiCrawlerRequestImpl.java


+ 1 - 1
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/util/HuaTaiCryptUtil.java

@@ -351,7 +351,7 @@ public class HuaTaiCryptUtil {
      * @return
      * @throws Exception
      */
-    public static String RSAEncrypt(String base64Text) throws Exception {
+    public static String                                                                                                                          RSAEncrypt(String base64Text) throws Exception {
         // 计算最大块长度(字节)
         if (base64Text.length() > MAX_LENGTH_ENCRYPT) {
             List<String> blocks = splitIntoBlocks(base64Text, BLOCK_SIZE_ENCRYPT);

+ 3 - 0
tenant/insurance/quotation-summary/src/main/resources/application-dev.yaml

@@ -126,6 +126,9 @@ huatai:
     huaTaiKey: AdOdn409KE6Z9XvFsJ
     key: kFl5aiHALbZ6TMTqQDxghMMC
     tokenUrl: https://vehpxy.pc.ehuatai.com/sign
+    username: "UE27017723VPN01"
+    password: "Dhbx135....."
+    comcode: "9270901-营业部代理业务一部"
 # 渤海财险生产api
 bohai:
   api:

+ 142 - 142
tenant/insurance/quotation-zhongan/src/test/java/com/jzg/quotation/zhongan/crawler/service/ZhongAnAPIServiceTest.java

@@ -1,142 +1,142 @@
-package com.jzg.quotation.zhongan.crawler.service;
-
-import com.jzg.quotation.commons.component.RequestComponent;
-import com.jzg.quotation.zhongan.crawler.model.entity.ZhongAnBizDocumentInfo;
-import com.jzg.quotation.zhongan.crawler.model.result.ZhongAnQueryCarInfoResult;
-import com.jzg.quotation.zhongan.crawler.model.result.ZhongAnQueryDocumentInfoResult;
-import com.jzg.quotation.zhongan.crawler.model.result.ZhongAnQueryPolicyDetailResult;
-import io.netty.channel.ChannelOption;
-import io.netty.handler.ssl.SslContextBuilder;
-import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
-import io.netty.handler.timeout.ReadTimeoutHandler;
-import io.netty.handler.timeout.WriteTimeoutHandler;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.http.client.reactive.ReactorClientHttpConnector;
-import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
-import org.springframework.web.reactive.function.client.WebClient;
-import reactor.core.publisher.Mono;
-import reactor.netty.http.client.HttpClient;
-import reactor.netty.resources.ConnectionProvider;
-
-import java.time.Duration;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-public class ZhongAnAPIServiceTest {
-    private static final Logger logger = LoggerFactory.getLogger(ZhongAnAPIServiceTest.class);
-
-    private static ZhongAnAPIService zhongAnAPIService;
-
-
-    @BeforeAll
-    public static void before() {
-        // 启用SSL调试(查看握手过程)
-        //System.setProperty("javax.net.debug", "ssl:handshake");
-
-        // 配置HTTP连接池
-        ConnectionProvider connectionProvider = ConnectionProvider
-                .builder("http")
-                .maxConnections(500)
-                .maxIdleTime(Duration.ofSeconds(30))
-                .build();
-
-        // 配置HTTP客户端
-        HttpClient httpClient = reactor.netty.http.client.HttpClient
-                .create(connectionProvider)
-                .secure(ssl -> ssl.sslContext(
-                        SslContextBuilder.forClient()
-                                .trustManager(InsecureTrustManagerFactory.INSTANCE)
-                ))
-                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000)
-                .responseTimeout(Duration.ofSeconds(50))
-                .doOnConnected(conn ->
-                        conn.addHandlerLast(new ReadTimeoutHandler(50)).addHandlerLast(new WriteTimeoutHandler(50)));
-
-        WebClient.builder()
-                .clientConnector(new ReactorClientHttpConnector(httpClient))
-                .build();
-        // 构建WebClient实例
-        WebClient webClient = WebClient
-                .builder()
-                .clientConnector(new ReactorClientHttpConnector(httpClient))
-                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
-                .defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
-                .filter(ExchangeFilterFunction.ofRequestProcessor(
-                        clientRequest -> {
-                            // 打印请求头信息
-                            clientRequest
-                                    .headers()
-                                    .forEach((key, values) -> {
-                                        logger.info("请求头: {}: {}", key, values);
-                                    });
-                            return Mono.just(clientRequest);
-                        }
-                ))
-                .codecs(item->item.defaultCodecs().maxInMemorySize(10 * 1024 * 1024))
-                .build();
-
-
-        RequestComponent requestComponent = new RequestComponent(webClient);
-
-        zhongAnAPIService = new ZhongAnAPIService();
-        zhongAnAPIService.setRequestComponent(requestComponent);
-
-
-        //ChengTaiAPIHelper.initAPI("https://b2b.champion-ic.com");
-    }
-
-
-    @Test
-    public void queryDocumentInfo() {
-        String token = "zaLoginCookieKey=9b902b0ec92581f51587ce2a9da7019ec8f9582b1a43c0f437b9566049b486c2;";
-        ZhongAnQueryDocumentInfoResult zhongAnQueryDocumentInfoResult = zhongAnAPIService.queryDocumentInfo(token, "291e19533f8ee5b20d8eaf64ec4f43b5");
-
-        assertNotNull(zhongAnQueryDocumentInfoResult);
-
-        List<ZhongAnBizDocumentInfo> bizDocumentInfo = zhongAnQueryDocumentInfoResult.getBizDocumentInfo();
-
-        for (ZhongAnBizDocumentInfo bizDocument : bizDocumentInfo) {
-            String url = "https://c.zhongan.com/open/bmw/n/query_controller/downloadDocument.json?orderNo=%s&fileName=%s&documentUrl=%s".formatted("291e19533f8ee5b20d8eaf64ec4f43b5",bizDocument.getDocumentName(), bizDocument.getDocumentUrl());
-
-            System.out.println(url);
-        }
-    }
-
-    @Test
-    public void queryPolicyDetail() {
-        String token = "zaLoginCookieKey=9b902b0ec92581f51587ce2a9da7019ec8f9582b1a43c0f437b9566049b486c2;";
-        String policyId = "bd162dd1260519fc39aa446aee32d9ab";
-
-        ZhongAnQueryPolicyDetailResult result = zhongAnAPIService.queryPolicyDetail(token, policyId);
-
-        assertNotNull(result);
-
-        String policyStatus = result.getDatas().getPolicy().getVehiclePolicyDTO().getPolicyStatus();
-        String policyStatusText = result.getDatas().getPolicy().getVehiclePolicyDTO().getPolicyStatusText();
-
-        System.out.println(policyStatus);
-        System.out.println(policyStatusText);
-    }
-
-    @Test
-    public void queryCarInfo() {
-        String token = "zaLoginCookieKey=9b902b0ec92581f51587ce2a9da7019ec8f9582b1a43c0f437b9566049b486c2;";
-        String flowId = "FJ14309612196676b6cd4";
-
-        ZhongAnQueryCarInfoResult result = zhongAnAPIService.queryCarInfo(token, flowId);
-
-        assertNotNull(result);
-
-        Map<String, Object> unknownFields = result.getUnknownFields();
-
-        System.out.println();
-        System.out.println(unknownFields);
-    }
-}
+//package com.jzg.quotation.zhongan.crawler.service;
+//
+//import com.jzg.quotation.commons.component.RequestComponent;
+//import com.jzg.quotation.zhongan.crawler.model.entity.ZhongAnBizDocumentInfo;
+//import com.jzg.quotation.zhongan.crawler.model.result.ZhongAnQueryCarInfoResult;
+//import com.jzg.quotation.zhongan.crawler.model.result.ZhongAnQueryDocumentInfoResult;
+//import com.jzg.quotation.zhongan.crawler.model.result.ZhongAnQueryPolicyDetailResult;
+//import io.netty.channel.ChannelOption;
+//import io.netty.handler.ssl.SslContextBuilder;
+//import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
+//import io.netty.handler.timeout.ReadTimeoutHandler;
+//import io.netty.handler.timeout.WriteTimeoutHandler;
+//import org.junit.jupiter.api.BeforeAll;
+//import org.junit.jupiter.api.Test;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import org.springframework.http.HttpHeaders;
+//import org.springframework.http.MediaType;
+//import org.springframework.http.client.reactive.ReactorClientHttpConnector;
+//import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
+//import org.springframework.web.reactive.function.client.WebClient;
+//import reactor.core.publisher.Mono;
+//import reactor.netty.http.client.HttpClient;
+//import reactor.netty.resources.ConnectionProvider;
+//
+//import java.time.Duration;
+//import java.util.List;
+//import java.util.Map;
+//
+//import static org.junit.jupiter.api.Assertions.assertNotNull;
+//
+//public class ZhongAnAPIServiceTest {
+//    private static final Logger logger = LoggerFactory.getLogger(ZhongAnAPIServiceTest.class);
+//
+//    private static ZhongAnAPIService zhongAnAPIService;
+//
+//
+//    @BeforeAll
+//    public static void before() {
+//        // 启用SSL调试(查看握手过程)
+//        //System.setProperty("javax.net.debug", "ssl:handshake");
+//
+//        // 配置HTTP连接池
+//        ConnectionProvider connectionProvider = ConnectionProvider
+//                .builder("http")
+//                .maxConnections(500)
+//                .maxIdleTime(Duration.ofSeconds(30))
+//                .build();
+//
+//        // 配置HTTP客户端
+//        HttpClient httpClient = reactor.netty.http.client.HttpClient
+//                .create(connectionProvider)
+//                .secure(ssl -> ssl.sslContext(
+//                        SslContextBuilder.forClient()
+//                                .trustManager(InsecureTrustManagerFactory.INSTANCE)
+//                ))
+//                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000)
+//                .responseTimeout(Duration.ofSeconds(50))
+//                .doOnConnected(conn ->
+//                        conn.addHandlerLast(new ReadTimeoutHandler(50)).addHandlerLast(new WriteTimeoutHandler(50)));
+//
+//        WebClient.builder()
+//                .clientConnector(new ReactorClientHttpConnector(httpClient))
+//                .build();
+//        // 构建WebClient实例
+//        WebClient webClient = WebClient
+//                .builder()
+//                .clientConnector(new ReactorClientHttpConnector(httpClient))
+//                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
+//                .defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
+//                .filter(ExchangeFilterFunction.ofRequestProcessor(
+//                        clientRequest -> {
+//                            // 打印请求头信息
+//                            clientRequest
+//                                    .headers()
+//                                    .forEach((key, values) -> {
+//                                        logger.info("请求头: {}: {}", key, values);
+//                                    });
+//                            return Mono.just(clientRequest);
+//                        }
+//                ))
+//                .codecs(item->item.defaultCodecs().maxInMemorySize(10 * 1024 * 1024))
+//                .build();
+//
+//
+//        RequestComponent requestComponent = new RequestComponent(webClient);
+//
+//        zhongAnAPIService = new ZhongAnAPIService();
+//        zhongAnAPIService.setRequestComponent(requestComponent);
+//
+//
+//        //ChengTaiAPIHelper.initAPI("https://b2b.champion-ic.com");
+//    }
+//
+//
+//    @Test
+//    public void queryDocumentInfo() {
+//        String token = "zaLoginCookieKey=9b902b0ec92581f51587ce2a9da7019ec8f9582b1a43c0f437b9566049b486c2;";
+//        ZhongAnQueryDocumentInfoResult zhongAnQueryDocumentInfoResult = zhongAnAPIService.queryDocumentInfo(token, "291e19533f8ee5b20d8eaf64ec4f43b5");
+//
+//        assertNotNull(zhongAnQueryDocumentInfoResult);
+//
+//        List<ZhongAnBizDocumentInfo> bizDocumentInfo = zhongAnQueryDocumentInfoResult.getBizDocumentInfo();
+//
+//        for (ZhongAnBizDocumentInfo bizDocument : bizDocumentInfo) {
+//            String url = "https://c.zhongan.com/open/bmw/n/query_controller/downloadDocument.json?orderNo=%s&fileName=%s&documentUrl=%s".formatted("291e19533f8ee5b20d8eaf64ec4f43b5",bizDocument.getDocumentName(), bizDocument.getDocumentUrl());
+//
+//            System.out.println(url);
+//        }
+//    }
+//
+//    @Test
+//    public void queryPolicyDetail() {
+//        String token = "zaLoginCookieKey=9b902b0ec92581f51587ce2a9da7019ec8f9582b1a43c0f437b9566049b486c2;";
+//        String policyId = "bd162dd1260519fc39aa446aee32d9ab";
+//
+//        ZhongAnQueryPolicyDetailResult result = zhongAnAPIService.queryPolicyDetail(token, policyId);
+//
+//        assertNotNull(result);
+//
+//        String policyStatus = result.getDatas().getPolicy().getVehiclePolicyDTO().getPolicyStatus();
+//        String policyStatusText = result.getDatas().getPolicy().getVehiclePolicyDTO().getPolicyStatusText();
+//
+//        System.out.println(policyStatus);
+//        System.out.println(policyStatusText);
+//    }
+//
+//    @Test
+//    public void queryCarInfo() {
+//        String token = "zaLoginCookieKey=9b902b0ec92581f51587ce2a9da7019ec8f9582b1a43c0f437b9566049b486c2;";
+//        String flowId = "FJ14309612196676b6cd4";
+//
+//        ZhongAnQueryCarInfoResult result = zhongAnAPIService.queryCarInfo(token, flowId);
+//
+//        assertNotNull(result);
+//
+//        Map<String, Object> unknownFields = result.getUnknownFields();
+//
+//        System.out.println();
+//        System.out.println(unknownFields);
+//    }
+//}

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů