From 3d9c6dcfb95a0033e76a01ad015edb95f94b3b35 Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Wed, 21 Jan 2026 18:06:01 +0800 Subject: [PATCH] =?UTF-8?q?token=E8=8E=B7=E5=8F=961?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tem/bocai/controller/LoginCrawler.java | 13 ++-- .../com/tem/bocai/param/LoginInfoParam.java | 63 +++++++++++++++++++ .../com/tem/bocai/service/LoginService.java | 4 +- .../bocai/service/impl/LoginServiceImpl.java | 20 +++--- .../com/tem/bocai/util/TokenCacheService.java | 24 +++---- 5 files changed, 96 insertions(+), 28 deletions(-) create mode 100644 src/main/java/com/tem/bocai/param/LoginInfoParam.java diff --git a/src/main/java/com/tem/bocai/controller/LoginCrawler.java b/src/main/java/com/tem/bocai/controller/LoginCrawler.java index 0451bc7..c0d70b9 100644 --- a/src/main/java/com/tem/bocai/controller/LoginCrawler.java +++ b/src/main/java/com/tem/bocai/controller/LoginCrawler.java @@ -1,15 +1,16 @@ package com.tem.bocai.controller; +import com.tem.bocai.param.LoginInfoParam; import com.tem.bocai.service.LoginService; import com.tem.bocai.util.ImageOcrService; import net.sourceforge.tess4j.TesseractException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.io.IOException; @RestController +@RequestMapping("/ocr") public class LoginCrawler { private final LoginService loginService; @@ -18,14 +19,14 @@ public class LoginCrawler { public LoginCrawler(LoginService loginService) { this.loginService = loginService; } - @GetMapping("/ocr/login") - public ResponseEntity ocrLocalImage(String username, String password,String loginUrl,Integer winNum,Integer loseNum) throws IOException, TesseractException { - String result = loginService.loginAutomatic(username,password,loginUrl,winNum,loseNum); + @PostMapping("/login") + public ResponseEntity ocrLocalImage(@RequestBody LoginInfoParam loginInfoParam) throws IOException, TesseractException { + String result = loginService.loginAutomatic(loginInfoParam); return ResponseEntity.ok(result); } //今日已结爬取 - @GetMapping("/ocr/completedToday") + @GetMapping("/completedToday") public ResponseEntity completedToday() throws IOException, TesseractException { String result = loginService.completedToday(); return ResponseEntity.ok(result); diff --git a/src/main/java/com/tem/bocai/param/LoginInfoParam.java b/src/main/java/com/tem/bocai/param/LoginInfoParam.java new file mode 100644 index 0000000..b19380e --- /dev/null +++ b/src/main/java/com/tem/bocai/param/LoginInfoParam.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + */ + +package com.tem.bocai.param; + +import lombok.Data; + +@Data +public class LoginInfoParam { + + public String username; + public String password; + public String loginUrl; + public Integer winNum; + public Integer loseNum; + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getLoginUrl() { + return loginUrl; + } + + public void setLoginUrl(String loginUrl) { + this.loginUrl = loginUrl; + } + + public Integer getWinNum() { + return winNum; + } + + public void setWinNum(Integer winNum) { + this.winNum = winNum; + } + + public Integer getLoseNum() { + return loseNum; + } + + public void setLoseNum(Integer loseNum) { + this.loseNum = loseNum; + } +} diff --git a/src/main/java/com/tem/bocai/service/LoginService.java b/src/main/java/com/tem/bocai/service/LoginService.java index 47aa515..f5b7903 100644 --- a/src/main/java/com/tem/bocai/service/LoginService.java +++ b/src/main/java/com/tem/bocai/service/LoginService.java @@ -1,9 +1,11 @@ package com.tem.bocai.service; +import com.tem.bocai.param.LoginInfoParam; + public interface LoginService { - String loginAutomatic(String username, String password,String loginUrl,Integer winNum,Integer loseNum); + String loginAutomatic(LoginInfoParam loginInfoParam); //获取token String completedToday(); diff --git a/src/main/java/com/tem/bocai/service/impl/LoginServiceImpl.java b/src/main/java/com/tem/bocai/service/impl/LoginServiceImpl.java index 921f803..4306f9d 100644 --- a/src/main/java/com/tem/bocai/service/impl/LoginServiceImpl.java +++ b/src/main/java/com/tem/bocai/service/impl/LoginServiceImpl.java @@ -1,6 +1,7 @@ package com.tem.bocai.service.impl; import com.tem.bocai.entity.LoginInfoResult; +import com.tem.bocai.param.LoginInfoParam; import com.tem.bocai.service.LoginService; import com.tem.bocai.util.*; import org.springframework.stereotype.Service; @@ -43,16 +44,16 @@ public class LoginServiceImpl implements LoginService { private TokenCacheService tokenCacheService; @Override - public String loginAutomatic(String username, String password, String loginUrl, Integer winNum, Integer loseNum) { + public String loginAutomatic(LoginInfoParam loginInfoParam) { String token = ""; for (int attempt = 1; attempt <= MAX_RETRY; attempt++) { System.out.println("\n=== 第 " + attempt + " 次尝试 ==="); try { - token = tokenCacheService.attemptLogin(); + token = tokenCacheService.attemptLogin(loginInfoParam); tokenCacheService.saveToken(token); if (token != null && !token.isEmpty()) { //保存用户信息 - addLoginInfo(username, password, loginUrl, winNum, loseNum); + addLoginInfo(loginInfoParam); // 2. 创建爬虫实例,传入token LotteryWebMagicCrawler crawler = new LotteryWebMagicCrawler(token); @@ -109,14 +110,13 @@ public class LoginServiceImpl implements LoginService { /** * 添加登录信息 */ - public boolean addLoginInfo(String username, String password, - String loginUrl, Integer winNum, Integer loseNum) { + public boolean addLoginInfo(LoginInfoParam loginInfoParam) { LoginInfoResult loginInfo = new LoginInfoResult(); - loginInfo.setUsername(username); - loginInfo.setPassword(password); - loginInfo.setLoginUrl(loginUrl); - loginInfo.setWinNum(winNum != null ? winNum : 0); - loginInfo.setLoseNum(loseNum != null ? loseNum : 0); + loginInfo.setUsername(loginInfoParam.getUsername()); + loginInfo.setPassword(loginInfoParam.getPassword()); + loginInfo.setLoginUrl(loginInfoParam.getLoginUrl()); + loginInfo.setWinNum(loginInfoParam.getWinNum() != null ? loginInfoParam.getWinNum() : 0); + loginInfo.setLoseNum(loginInfoParam.getLoseNum() != null ? loginInfoParam.getLoseNum() : 0); loginInfo.setCreateTime(new Date()); loginInfo.setUpdateTime(new Date()); diff --git a/src/main/java/com/tem/bocai/util/TokenCacheService.java b/src/main/java/com/tem/bocai/util/TokenCacheService.java index 804f225..c6cdc0f 100644 --- a/src/main/java/com/tem/bocai/util/TokenCacheService.java +++ b/src/main/java/com/tem/bocai/util/TokenCacheService.java @@ -1,5 +1,6 @@ package com.tem.bocai.util; +import com.tem.bocai.param.LoginInfoParam; import com.tem.bocai.service.LoginService; import net.sourceforge.tess4j.Tesseract; import net.sourceforge.tess4j.TesseractException; @@ -126,7 +127,8 @@ public class TokenCacheService { for (int attempt = 1; attempt <= MAX_RETRY; attempt++) { System.out.println("\n=== 第 " + attempt + " 次尝试 ==="); try { - token = attemptLogin(); + + // token = attemptLogin(); if (token != null && !token.isEmpty()) { return token; @@ -153,7 +155,7 @@ public class TokenCacheService { /** * 单次登录尝试 */ - public String attemptLogin() { + public String attemptLogin(LoginInfoParam loginInfoParam) { CookieStore cookieStore = new BasicCookieStore(); try (CloseableHttpClient httpClient = createHttpClient(cookieStore)) { // 1. 获取验证码 @@ -167,7 +169,7 @@ public class TokenCacheService { return null; } // 3. 执行登录 - return performLogin(httpClient, cookieStore, code); + return performLogin(httpClient, cookieStore, code,loginInfoParam); } catch (Exception e) { System.out.println("登录尝试失败" + e); @@ -262,13 +264,13 @@ public class TokenCacheService { */ private String performLogin(CloseableHttpClient httpClient, CookieStore cookieStore, - String code) throws IOException, InterruptedException { + String code,LoginInfoParam loginInfoParam) throws IOException, InterruptedException { System.out.println("执行登录..."); // 等待一下再发送登录请求 Thread.sleep(1500 + (long) (Math.random() * 1000)); - HttpPost loginPost = createLoginRequest(code); + HttpPost loginPost = createLoginRequest(code,loginInfoParam); try (CloseableHttpResponse loginResponse = httpClient.execute(loginPost)) { return processLoginResponse(loginResponse, cookieStore); @@ -278,20 +280,20 @@ public class TokenCacheService { /** * 创建登录请求 */ - private HttpPost createLoginRequest(String code) throws UnsupportedEncodingException { - HttpPost loginPost = new HttpPost(BASE_URL + "/login"); + private HttpPost createLoginRequest(String code,LoginInfoParam loginInfoParam) throws UnsupportedEncodingException { + HttpPost loginPost = new HttpPost(loginInfoParam.loginUrl + "/login"); // 设置请求头 setCommonHeaders(loginPost); - loginPost.setHeader("Referer", BASE_URL + "/login"); - loginPost.setHeader("Origin", BASE_URL); + loginPost.setHeader("Referer", loginInfoParam.loginUrl + "/login"); + loginPost.setHeader("Origin", loginInfoParam.loginUrl); loginPost.setHeader("Accept", "application/json, text/plain, */*"); // 构建登录参数 List params = new ArrayList<>(); params.add(new BasicNameValuePair("type", "1")); - params.add(new BasicNameValuePair("account", "pmk1")); - params.add(new BasicNameValuePair("password", "Asd123123")); + params.add(new BasicNameValuePair("account", loginInfoParam.username)); + params.add(new BasicNameValuePair("password", loginInfoParam.password)); params.add(new BasicNameValuePair("code", code)); loginPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));