|
|
@@ -2,6 +2,7 @@ package com.jzg.quotation.zhongmei.crawler.component;
|
|
|
|
|
|
import cn.hutool.core.util.XmlUtil;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.alibaba.fastjson2.JSON;
|
|
|
import com.jzg.commons.exception.SystemException;
|
|
|
import com.jzg.quotation.commons.component.RequestComponent;
|
|
|
import com.jzg.quotation.commons.constant.CacheConstant;
|
|
|
@@ -25,6 +26,7 @@ import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.redisson.api.RMap;
|
|
|
import org.redisson.api.RedissonClient;
|
|
|
+import org.springframework.http.HttpHeaders;
|
|
|
import org.springframework.http.ResponseEntity;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.util.LinkedMultiValueMap;
|
|
|
@@ -34,6 +36,7 @@ import org.w3c.dom.Document;
|
|
|
import org.w3c.dom.Element;
|
|
|
import org.w3c.dom.Node;
|
|
|
import org.w3c.dom.NodeList;
|
|
|
+import reactor.core.publisher.Mono;
|
|
|
|
|
|
import java.time.Duration;
|
|
|
import java.util.*;
|
|
|
@@ -76,20 +79,22 @@ public class ZmCrawlerRequestComponent {
|
|
|
if (frequency <= 0) {
|
|
|
throw new SystemException("验证码异常");
|
|
|
}
|
|
|
- ZmCrawlerCaptchaRequest captchaRequest = new ZmCrawlerCaptchaRequest(username);
|
|
|
- // 请求
|
|
|
- ZmCrawlerCaptchaResponse zmCrawlerCaptchaResponse = requestComponent.objectPost(RequestUrl.CAPTCHA.getRequestUrl(zmCrawlerProperties.getBaseUrl()), Base64Tool.encode(JSONObject.toJSONString(captchaRequest)), "", ZmCrawlerCaptchaResponse.class);
|
|
|
- // 识别验证码
|
|
|
- String s = exteriorUtilsRequest.captchaIdentify(zmCrawlerCaptchaResponse.getVerifyCode());
|
|
|
try {
|
|
|
- int i = processCaptcha(s);
|
|
|
- s = String.valueOf(i);
|
|
|
+ ZmCrawlerCaptchaRequest captchaRequest = new ZmCrawlerCaptchaRequest(username);
|
|
|
+ BaseRequestHead head = new BaseRequestHead(null,"2");
|
|
|
+ captchaRequest.setHead(head);
|
|
|
+ // 请求
|
|
|
+ Mono<ZmCrawlerCaptchaResponse> monoResponse = requestComponent.postGbk(RequestUrl.CAPTCHA.getRequestUrl(zmCrawlerProperties.getBaseUrl()), Base64Tool.encode(JSONObject.toJSONString(captchaRequest)), ZmCrawlerCaptchaResponse.class, new HttpHeaders());
|
|
|
+ ZmCrawlerCaptchaResponse response = monoResponse.block();
|
|
|
+ // 识别验证码
|
|
|
+ String s = exteriorUtilsRequest.captchaIdentify(response.getVerifyCode());
|
|
|
+ response.setVerifyStr(s);
|
|
|
+ return response;
|
|
|
} catch (Exception e) {
|
|
|
frequency = frequency - 1;
|
|
|
return captcha(frequency, username);
|
|
|
}
|
|
|
- zmCrawlerCaptchaResponse.setVerifyStr(s);
|
|
|
- return zmCrawlerCaptchaResponse;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
private Map<String, String> buildCache(ZmCrawlerAuthenticateResponse authenticateResponse) {
|
|
|
@@ -109,12 +114,15 @@ public class ZmCrawlerRequestComponent {
|
|
|
public String authenticate(String username, String password, int loginsNumber) {
|
|
|
// 登录验证码获取
|
|
|
ZmCrawlerCaptchaResponse captchaResponse = captcha(REQUEST_NUMBER, username);
|
|
|
+
|
|
|
// 登录存入缓存当中
|
|
|
ZmCrawlerAuthenticateRequest authenticateRequest = new ZmCrawlerAuthenticateRequest(captchaResponse, username, password);
|
|
|
- ResponseEntity<ZmCrawlerAuthenticateResponse> responseEntity = requestComponent.objectPost(RequestUrl.AUTHENTICATE.getRequestUrl(zmCrawlerProperties.getBaseUrl()), Base64Tool.encode(JSONObject.toJSONString(authenticateRequest)), ZmCrawlerAuthenticateResponse.class);
|
|
|
- ZmCrawlerAuthenticateResponse authenticateResponse = Optional.of(responseEntity).map(ResponseEntity::getBody).orElseThrow();
|
|
|
+ BaseRequestHead head = new BaseRequestHead(null,"2");
|
|
|
+ authenticateRequest.setHead(head);
|
|
|
|
|
|
- if ("0".equals(authenticateResponse.getHead().getReturnCode())) {
|
|
|
+ Mono<ZmCrawlerAuthenticateResponse> responseMono = requestComponent.postGbk(RequestUrl.AUTHENTICATE.getRequestUrl(zmCrawlerProperties.getBaseUrl()), Base64Tool.encode(JSONObject.toJSONString(authenticateRequest)), ZmCrawlerAuthenticateResponse.class, new HttpHeaders());
|
|
|
+ ZmCrawlerAuthenticateResponse authenticateResponse = Optional.of(responseMono.block()).orElseThrow();
|
|
|
+ if ("0".equals(authenticateResponse.getHead().getReturnCode()) && authenticateResponse.getReCode().equals("0")) {
|
|
|
Map<String, String> authorizationMap = buildCache(authenticateResponse);
|
|
|
RMap<Object, Object> map = redissonClient.getMap(CacheConstant.ZHONGMEI_AUTHORIZATION + username);
|
|
|
map.putAll(authorizationMap);
|
|
|
@@ -199,7 +207,9 @@ public class ZmCrawlerRequestComponent {
|
|
|
* @return
|
|
|
*/
|
|
|
public List<ZmCrawlerModelQueryResponse.FullCarDataDTO> modelQuery(ZmCrawlerModelQueryRequest modelQueryRequest) {
|
|
|
- ZmCrawlerModelQueryResponse zmCrawlerModelQueryResponseResponse = request(RequestUrl.MODELS_QUERY, modelQueryRequest, ZmCrawlerModelQueryResponse.class);
|
|
|
+ Mono<ZmCrawlerModelQueryResponse> responseMono = requestComponent.postGbk(RequestUrl.MODELS_QUERY.getRequestUrl(zmCrawlerProperties.getBaseUrl()),
|
|
|
+ Base64Tool.encode(JSONObject.toJSONString(modelQueryRequest)), ZmCrawlerModelQueryResponse.class,new HttpHeaders());
|
|
|
+ ZmCrawlerModelQueryResponse zmCrawlerModelQueryResponseResponse = responseMono.block();
|
|
|
return zmCrawlerModelQueryResponseResponse.getCarModel();
|
|
|
}
|
|
|
|
|
|
@@ -208,8 +218,9 @@ public class ZmCrawlerRequestComponent {
|
|
|
* @param modelQueryRequest
|
|
|
* @return
|
|
|
*/
|
|
|
- public ZmCrawlerNetpointQueryResponse netpointQuery(ZmCrawlerNetpointQueryRequest modelQueryRequest) {
|
|
|
- return request(RequestUrl.NETPOINT_QUERY, modelQueryRequest, ZmCrawlerNetpointQueryResponse.class);
|
|
|
+ public Mono<ZmCrawlerNetpointQueryResponse> netpointQuery(ZmCrawlerNetpointQueryRequest modelQueryRequest) {
|
|
|
+ return requestComponent.postGbk(RequestUrl.NETPOINT_QUERY.getRequestUrl(zmCrawlerProperties.getBaseUrl()),
|
|
|
+ Base64Tool.encode(JSONObject.toJSONString(modelQueryRequest)), ZmCrawlerNetpointQueryResponse.class,new HttpHeaders());
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -220,9 +231,9 @@ public class ZmCrawlerRequestComponent {
|
|
|
* @return
|
|
|
*/
|
|
|
public SaleInfoDTO getSaleInfoDTO(ZmCrawlerConfigureParameters parameters, BaseRequestHead baseRequestHead) {
|
|
|
- ZmCrawlerNetpointQueryRequest netpointQueryRequest = new ZmCrawlerNetpointQueryRequest();
|
|
|
- netpointQueryRequest.setHead(baseRequestHead);
|
|
|
- ZmCrawlerNetpointQueryResponse netpointQueryResponse = netpointQuery(netpointQueryRequest);
|
|
|
+ ZmCrawlerNetpointQueryRequest netpointQueryRequest = new ZmCrawlerNetpointQueryRequest(parameters,baseRequestHead);
|
|
|
+ Mono<ZmCrawlerNetpointQueryResponse> netpointQueryResponseMono = netpointQuery(netpointQueryRequest);
|
|
|
+ ZmCrawlerNetpointQueryResponse netpointQueryResponse = netpointQueryResponseMono.block();
|
|
|
return new SaleInfoDTO(netpointQueryResponse, parameters);
|
|
|
}
|
|
|
|
|
|
@@ -232,7 +243,11 @@ public class ZmCrawlerRequestComponent {
|
|
|
* @return
|
|
|
*/
|
|
|
public ZmCrawlerActualValueResponse getActualValue(ZmCrawlerActualValueRequest actualValueRequest) {
|
|
|
- return request(RequestUrl.ACTUAL_VALUE, actualValueRequest, ZmCrawlerActualValueResponse.class);
|
|
|
+ System.out.println(JSONObject.toJSONString(actualValueRequest));
|
|
|
+ Mono<ZmCrawlerActualValueResponse> responseMono = requestComponent.postGbk(RequestUrl.ACTUAL_VALUE.getRequestUrl(zmCrawlerProperties.getBaseUrl()),
|
|
|
+ Base64Tool.encode(JSONObject.toJSONString(actualValueRequest)), ZmCrawlerActualValueResponse.class,new HttpHeaders());
|
|
|
+ ZmCrawlerActualValueResponse response = responseMono.block();
|
|
|
+ return response;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -823,4 +838,30 @@ public class ZmCrawlerRequestComponent {
|
|
|
public ZmCrawlerPolicyPrintResponse policyPrint(ZmCrawlerPolicyPrintRequest printRequest) {
|
|
|
return request(RequestUrl.POLICY_PRINT, printRequest, ZmCrawlerPolicyPrintResponse.class );
|
|
|
}
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ System.out.println(Base64Tool.encode(JSONObject.toJSONString("{\n" +
|
|
|
+ " \"head\": {\n" +
|
|
|
+ " \"token\": \"sinhRNuIos20250624155233333oftJ29pr\",\n" +
|
|
|
+ " \"transType\": \"Req\",\n" +
|
|
|
+ " \"transCode\": \"ModelsQuery\",\n" +
|
|
|
+ " \"source\": \"2\"\n" +
|
|
|
+ " },\n" +
|
|
|
+ " \"loginCom\": \"14091100\",\n" +
|
|
|
+ " \"modelName\": \"宝马BMW7201AN轿车\",\n" +
|
|
|
+ " \"brand\": \"\",\n" +
|
|
|
+ " \"carYear\": \"\",\n" +
|
|
|
+ " \"carType\": \"\",\n" +
|
|
|
+ " \"deptcode\": \"\",\n" +
|
|
|
+ " \"displacement\": \"\",\n" +
|
|
|
+ " \"factory\": \"\",\n" +
|
|
|
+ " \"purchasepricenottaxMin\": \"\",\n" +
|
|
|
+ " \"purchasepricenottaxMax\": \"\",\n" +
|
|
|
+ " \"motorMainType\": \"100\",\n" +
|
|
|
+ " \"modelCode\": \"\",\n" +
|
|
|
+ " \"planCode\": \"1379\",\n" +
|
|
|
+ " \"vin\": \"LBVKY1105LSS79828\",\n" +
|
|
|
+ " \"platModelCode\": \"\"\n" +
|
|
|
+ " }")));
|
|
|
+ }
|
|
|
}
|