|
|
@@ -2,7 +2,6 @@ package com.jzg.quotation.dajia.crawler.component;
|
|
|
|
|
|
|
|
|
import com.alibaba.fastjson2.JSON;
|
|
|
-import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.jzg.commons.exception.SystemException;
|
|
|
import com.jzg.quotation.commons.component.RequestComponent;
|
|
|
import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
|
|
|
@@ -20,13 +19,15 @@ import org.springframework.http.HttpHeaders;
|
|
|
import org.springframework.http.MediaType;
|
|
|
import org.springframework.http.ResponseEntity;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
-import org.springframework.util.StringUtils;
|
|
|
import org.springframework.web.reactive.function.BodyInserters;
|
|
|
import org.springframework.web.reactive.function.client.WebClient;
|
|
|
import reactor.core.publisher.Mono;
|
|
|
|
|
|
import java.lang.reflect.InvocationTargetException;
|
|
|
-import java.util.*;
|
|
|
+import java.util.Base64;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.UUID;
|
|
|
|
|
|
@Slf4j
|
|
|
@Component
|
|
|
@@ -41,12 +42,9 @@ public class DaJiaCrawlerRequestComponent {
|
|
|
|
|
|
private final DaJiaCrawlerProperties daJiaCrawlerProperties;
|
|
|
|
|
|
- private final DaJiaCrawlerCacheComponent daJiaCrawlerCacheComponent;
|
|
|
-
|
|
|
// 循环次数
|
|
|
public static final int CIRCULATE_NUMBER = 3;
|
|
|
- // 登陆次数
|
|
|
- public static final int LOGINS_NUMBER = 3;
|
|
|
+
|
|
|
|
|
|
public int processCaptcha(String res) {
|
|
|
// 检查字符串长度是否足够,并且第三个字符不是'='
|
|
|
@@ -91,7 +89,7 @@ public class DaJiaCrawlerRequestComponent {
|
|
|
Map<String, Object> map = Map.of("imgId", UUID.randomUUID().toString().replaceAll("-", ""));
|
|
|
// 请求
|
|
|
DaJiaCrawlerBaseResponse request = requestComponent.requestGET(RequestUrl.CAPTCHA.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()), map, "", DaJiaCrawlerBaseResponse.class);
|
|
|
- DaJiaCrawlerCaptchaResponse daJiaCrawlerCaptchaResponse = DESEncryption.decrypt(request.getResult(), DaJiaCrawlerCaptchaResponse.class);
|
|
|
+ DaJiaCrawlerCaptchaResponse daJiaCrawlerCaptchaResponse = DESEncryption.decryptStrToObject(request.getResult(), DaJiaCrawlerCaptchaResponse.class);
|
|
|
// 识别验证码
|
|
|
String s = exteriorUtilsRequest.captchaIdentify(daJiaCrawlerCaptchaResponse.getImg());
|
|
|
try {
|
|
|
@@ -152,50 +150,17 @@ public class DaJiaCrawlerRequestComponent {
|
|
|
/**
|
|
|
* 登录次数
|
|
|
*
|
|
|
- * @param username 用户名
|
|
|
- * @param password 密码
|
|
|
- * @param loginsNumber 登录次数
|
|
|
+ * @param username 用户名
|
|
|
+ * @param password 密码
|
|
|
* @return token
|
|
|
*/
|
|
|
- public String authenticate(String username, String password, int loginsNumber) {
|
|
|
+ public ResponseEntity<DaJiaCrawlerBaseResponse> authenticate(String username, String password) {
|
|
|
// 登录验证码获取
|
|
|
DaJiaCrawlerCaptchaResponse captcha = captcha(CIRCULATE_NUMBER);
|
|
|
// 登录存入缓存当中
|
|
|
DaJiaCrawlerAuthenticateRequest request = new DaJiaCrawlerAuthenticateRequest(captcha, username, password);
|
|
|
-
|
|
|
- String jsonString = JSONObject.toJSONString(request);
|
|
|
- String data = DESEncryption.encrypt(jsonString);
|
|
|
- DaJiaCrawlerBaseRequest crawlerBaseRequest = new DaJiaCrawlerBaseRequest(data);
|
|
|
- ResponseEntity<DaJiaCrawlerBaseResponse> responseEntity = requestComponent.objectPost(RequestUrl.AUTHENTICATE.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()), crawlerBaseRequest, DaJiaCrawlerBaseResponse.class);
|
|
|
- DaJiaCrawlerBaseResponse response = Optional.of(responseEntity).map(ResponseEntity::getBody).orElseThrow();
|
|
|
-
|
|
|
- if ("200".equals(response.getCode())) {
|
|
|
- DaJiaCrawlerAuthenticateResponse daJiaCrawlerCaptchaResponse = DESEncryption.decrypt(response.getResult(), DaJiaCrawlerAuthenticateResponse.class);
|
|
|
- return daJiaCrawlerCacheComponent.cacheAuthorization(daJiaCrawlerCaptchaResponse.getIdToken(), daJiaCrawlerCaptchaResponse.getUserCode(), username);
|
|
|
- }
|
|
|
- loginsNumber = loginsNumber - 1;
|
|
|
- if (loginsNumber <= 0) {
|
|
|
- String message = Optional.ofNullable(responseEntity.getBody())
|
|
|
- .map(DaJiaCrawlerBaseResponse::getMessage)
|
|
|
- .orElseThrow(() -> new SystemException("登录失败"));
|
|
|
- throw new SystemException(message);
|
|
|
- }
|
|
|
- return authenticate(username, password, loginsNumber);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取请求头
|
|
|
- *
|
|
|
- * @return
|
|
|
- */
|
|
|
- public HttpHeaders getHeaders(String username, String password) {
|
|
|
- String authorization = daJiaCrawlerCacheComponent.getAuthorization(username);
|
|
|
- if (!StringUtils.hasLength(authorization)) {
|
|
|
- authorization = authenticate(username, password, LOGINS_NUMBER);
|
|
|
- }
|
|
|
- HttpHeaders headers = new HttpHeaders();
|
|
|
- headers.set(HttpHeaders.AUTHORIZATION , authorization);
|
|
|
- return headers;
|
|
|
+ DaJiaCrawlerBaseRequest crawlerBaseRequest = new DaJiaCrawlerBaseRequest(request);
|
|
|
+ return requestComponent.objectPost(RequestUrl.AUTHENTICATE.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()), crawlerBaseRequest, DaJiaCrawlerBaseResponse.class);
|
|
|
}
|
|
|
|
|
|
public <DaJiaResponse> DaJiaResponse requestUnencrypted(CrawlerRequestUrlStandard crawlerRequestUrlStandard, Object request, Class<DaJiaResponse> responseClass, HttpHeaders headers) {
|
|
|
@@ -312,16 +277,16 @@ public class DaJiaCrawlerRequestComponent {
|
|
|
/**
|
|
|
* 支付
|
|
|
*
|
|
|
- * @param orderNo 订单号
|
|
|
+ * @param orderNo 订单号
|
|
|
* @param operatorCode
|
|
|
- * @param headers 请求头
|
|
|
+ * @param headers 请求头
|
|
|
* @return
|
|
|
*/
|
|
|
public String qrcode(String orderNo, String operatorCode, HttpHeaders headers) {
|
|
|
String url = RequestUrl.QRCODE.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()) + "/" + orderNo + "/1";
|
|
|
Map<String, Object> map = Map.of("operatorCode", operatorCode);
|
|
|
DaJiaCrawlerBaseResponse daJiaCrawlerBaseResponse = requestComponent.get(url, map, "", DaJiaCrawlerBaseResponse.class, headers);
|
|
|
- DaJiaCrawlerQrcodeResponse daJiaCrawlerCaptchaResponse = DESEncryption.decrypt(daJiaCrawlerBaseResponse.getResult(), DaJiaCrawlerQrcodeResponse.class);
|
|
|
+ DaJiaCrawlerQrcodeResponse daJiaCrawlerCaptchaResponse = DESEncryption.decryptStrToObject(daJiaCrawlerBaseResponse.getResult(), DaJiaCrawlerQrcodeResponse.class);
|
|
|
return daJiaCrawlerCaptchaResponse.getUrl();
|
|
|
}
|
|
|
|