فهرست منبع

紫金获取Cookie,js算法接口具有时效性,10分钟请求一次

wangrq 1 ماه پیش
والد
کامیت
c02aa0509d

+ 12 - 12
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/component/ZiJinCrawlerRequestComponent.java

@@ -50,13 +50,13 @@ public class ZiJinCrawlerRequestComponent {
 
 
     /**
-     * Cookie缓存过期时间戳(毫秒),超过此时间需重新调用Python更新接口刷新Cookie
+     * 上次调用Python更新接口的时间戳,用于限制更新接口调用频率为10分钟一次
      */
-    private volatile long cookieExpireTime;
+    private volatile long lastUpdateTime;
     /**
-     * Cookie缓存有效期:10分钟(生成ck的JS算法具有时效性,超过10分钟需主动调用更新接口刷新)
+     * 更新接口调用间隔:10分钟(生成ck的JS算法具有时效性,超过10分钟需主动调用更新接口刷新)
      */
-    private static final long COOKIE_TTL_MS = 10 * 60 * 1000;
+    private static final long UPDATE_INTERVAL_MS = 10 * 60 * 1000;
 
     /**
      * 获取验证码
@@ -549,9 +549,9 @@ public class ZiJinCrawlerRequestComponent {
     }
 
     /**
-     * 获取Cookie字符串(带缓存)
+     * 获取Cookie字符串
      * <p>
-     * 由于生成ck的JS算法具有时效性,Cookie缓存10分钟后自动过期
+     * 由于生成ck的JS算法具有时效性,10分钟更新服务器算法的接口,确保Cookie的时效性
      * 过期时会先调用Python更新接口刷新Cookie,再重新获取。
      * <p>
      * Python接口返回示例:
@@ -566,13 +566,14 @@ public class ZiJinCrawlerRequestComponent {
      * @throws IOException 如果获取Cookie时发生错误
      */
     public String getCookie() throws IOException {
-        // 检查缓存是否有效
+        // 更新接口只10分钟调一次:距上次调用超过10分钟才调,否则跳过
         long now = System.currentTimeMillis();
-        if (now < cookieExpireTime) {
-            log.info("紫金Cookie JS算法剩余有效时间: {}ms", (cookieExpireTime - now));
+        if (now - lastUpdateTime >= UPDATE_INTERVAL_MS) {
+            log.info("距上次调用更新接口已超过{}分钟,调用Python更新接口刷新Cookie", UPDATE_INTERVAL_MS / 60000);
             updateCookie();
+            lastUpdateTime = System.currentTimeMillis();
         }
-        // 调用Python接口获取刷新后的Cookie
+        // 每次都调Python获取接口拿新的Cookie(不缓存,保证每次都是最新的)
         String cookieUrl = ziJinCrawlerProperties.getCookiePath();
         if (cookieUrl == null || cookieUrl.trim().isEmpty()) {
             throw new IOException("紫金crawler.cookie-path未配置");
@@ -600,8 +601,7 @@ public class ZiJinCrawlerRequestComponent {
             if (cookie.trim().isEmpty()) {
                 throw new IOException("获取Cookie失败: 拼接的Cookie字符串为空");
             }
-            cookieExpireTime = System.currentTimeMillis() + COOKIE_TTL_MS;
-            log.info("紫金Cookie获取并缓存成功,有效期: {}分钟", COOKIE_TTL_MS / 60000);
+            log.info("紫金Cookie获取成功");
             return cookie;
         } catch (IOException e) {
             throw e;