|
|
@@ -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;
|