From 65a5ce7d447c0d44b07b0094545d5c2e81a241e5 Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Fri, 31 Jan 2025 10:21:30 +0800 Subject: [PATCH] Fix Cronet not loading cookieJar on first request --- .../io/legado/app/help/http/CookieManager.kt | 23 +++++++++---------- .../app/lib/cronet/CronetInterceptor.kt | 16 +++++++++++-- .../app/model/analyzeRule/AnalyzeUrl.kt | 4 +++- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/http/CookieManager.kt b/app/src/main/java/io/legado/app/help/http/CookieManager.kt index 2401b8290..b9e4221a7 100644 --- a/app/src/main/java/io/legado/app/help/http/CookieManager.kt +++ b/app/src/main/java/io/legado/app/help/http/CookieManager.kt @@ -59,19 +59,18 @@ object CookieManager { val cookie = CookieStore.getCookie(domain) val requestCookie = request.header("Cookie") - mergeCookies(requestCookie, cookie)?.let { newCookie -> - kotlin.runCatching { - return request.newBuilder() - .header("Cookie", newCookie) - .build() - }.onFailure { - CookieStore.removeCookie(url) - AppLog.put( - "设置cookie出错,已清除cookie $domain cookie:$newCookie\n${it.localizedMessage}", - it - ) - } + val newCookie = mergeCookies(requestCookie, cookie) ?: return request + + kotlin.runCatching { + return request.newBuilder() + .header("Cookie", newCookie) + .build() + }.onFailure { + CookieStore.removeCookie(url) + val msg = "设置cookie出错,已清除cookie $domain cookie:$newCookie\n$it" + AppLog.put(msg, it) } + return request } diff --git a/app/src/main/java/io/legado/app/lib/cronet/CronetInterceptor.kt b/app/src/main/java/io/legado/app/lib/cronet/CronetInterceptor.kt index b10deebe5..98d295119 100644 --- a/app/src/main/java/io/legado/app/lib/cronet/CronetInterceptor.kt +++ b/app/src/main/java/io/legado/app/lib/cronet/CronetInterceptor.kt @@ -3,8 +3,15 @@ package io.legado.app.lib.cronet import android.annotation.SuppressLint import android.os.Build import androidx.annotation.Keep +import io.legado.app.help.http.CookieManager +import io.legado.app.help.http.CookieManager.cookieJarHeader import io.legado.app.utils.printOnDebug -import okhttp3.* +import okhttp3.Call +import okhttp3.CookieJar +import okhttp3.HttpUrl +import okhttp3.Interceptor +import okhttp3.Request +import okhttp3.Response import java.io.IOException @Keep @@ -28,7 +35,12 @@ class CronetInterceptor(private val cookieJar: CookieJar) : Interceptor { builder.removeHeader("Keep-Alive") builder.removeHeader("Accept-Encoding") - val newReq = builder.build() + var newReq = builder.build() + + if (newReq.header(cookieJarHeader) != null) { + newReq = CookieManager.loadRequest(newReq) + } + return proceedWithCronet(newReq, chain.call(), chain.readTimeoutMillis())!! } catch (e: Exception) { cronetException = e diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt index 5dde288b3..9a2ac4ab9 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt @@ -105,7 +105,7 @@ class AnalyzeUrl( private var retry: Int = 0 private var useWebView: Boolean = false private var webJs: String? = null - private val enabledCookieJar = source?.enabledCookieJar ?: false + private val enabledCookieJar = source?.enabledCookieJar == true private val domain: String private var webViewDelayTime: Long = 0 private val concurrentRateLimiter = ConcurrentRateLimiter(source) @@ -551,6 +551,8 @@ class AnalyzeUrl( } if (enabledCookieJar) { headerMap[CookieManager.cookieJarHeader] = "1" + } else { + headerMap.remove(CookieManager.cookieJarHeader) } }