From deeeaa3b53b98384dd11ff0fb7b5ce26f3f84f3f Mon Sep 17 00:00:00 2001 From: AndyBernie Date: Fri, 23 Oct 2020 19:40:01 +0800 Subject: [PATCH 1/3] update java.getCookie java.getCookie("http://baidu.com") return user=test;pwd=123 java.getCookie("http://baidu.com", "user") reurn test --- app/src/main/assets/updateLog.md | 2 +- app/src/main/java/io/legado/app/help/JsExtensions.kt | 10 ++++++++-- .../main/java/io/legado/app/help/http/CookieStore.kt | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 011689a1b..10b2e6acb 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -6,7 +6,7 @@ **2020/10/23** * 修复选择错误的bug * 修复长图最后一张不能滚动的bug -* js添加java.getCookie(sourceUrl)来获取登录后的cookie by [AndyBernie](https://github.com/AndyBernie) +* js添加java.getCookie(sourceUrl:String, key:String ?=null)来获取登录后的cookie by [AndyBernie](https://github.com/AndyBernie) * 修复简繁转换没有处理标题 **2020/10/21** diff --git a/app/src/main/java/io/legado/app/help/JsExtensions.kt b/app/src/main/java/io/legado/app/help/JsExtensions.kt index ff7357ad4..f42828476 100644 --- a/app/src/main/java/io/legado/app/help/JsExtensions.kt +++ b/app/src/main/java/io/legado/app/help/JsExtensions.kt @@ -123,8 +123,14 @@ interface JsExtensions { /** *js实现读取cookie */ - fun getCookie(tag: String): String { - return CookieStore.getCookie(tag) + fun getCookie(tag: String, key: String? = null): String { + val cookie = CookieStore.getCookie(tag) + val cookieMap = CookieStore.cookieToMap(cookie) + return if (key != null) { + cookieMap.get(key) ?: "" + } else { + cookie + } } /** diff --git a/app/src/main/java/io/legado/app/help/http/CookieStore.kt b/app/src/main/java/io/legado/app/help/http/CookieStore.kt index 2f2bfaaec..f97588a87 100644 --- a/app/src/main/java/io/legado/app/help/http/CookieStore.kt +++ b/app/src/main/java/io/legado/app/help/http/CookieStore.kt @@ -43,7 +43,7 @@ object CookieStore : CookiePersistor { App.db.cookieDao().delete(NetworkUtils.getSubDomain(url)) } - private fun cookieToMap(cookie: String): MutableMap { + fun cookieToMap(cookie: String): MutableMap { val cookieMap = mutableMapOf() if (cookie.isBlank()) { return cookieMap From 0a4b2018c71a3444dfaac7dc71f4f8c1c4eaea1e Mon Sep 17 00:00:00 2001 From: AndyBernie Date: Fri, 23 Oct 2020 20:50:31 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89cookie=E8=AE=BE=E7=BD=AE=20https://github.com/gedoor/l?= =?UTF-8?q?egado/commit/e2ba01806107fbe8523e34b760ad0dfad78ddcfa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/help/http/CookieStore.kt | 2 +- .../app/model/analyzeRule/AnalyzeUrl.kt | 30 +++++++++++++++---- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/http/CookieStore.kt b/app/src/main/java/io/legado/app/help/http/CookieStore.kt index f97588a87..a565560b7 100644 --- a/app/src/main/java/io/legado/app/help/http/CookieStore.kt +++ b/app/src/main/java/io/legado/app/help/http/CookieStore.kt @@ -63,7 +63,7 @@ object CookieStore : CookiePersistor { return cookieMap } - private fun mapToCookie(cookieMap: Map?): String? { + fun mapToCookie(cookieMap: Map?): String? { if (cookieMap == null || cookieMap.isEmpty()) { return null } 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 160c0debf..a7eb08968 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 @@ -281,7 +281,13 @@ class AnalyzeUrl( fun getResponse(tag: String): Call { val cookie = CookieStore.getCookie(tag) if (cookie.isNotEmpty()) { - headerMap["Cookie"] += ";${cookie}" + val cookieMap = CookieStore.cookieToMap(cookie) + val customCookieMap = CookieStore.cookieToMap(headerMap.get("Cookie") ?: "") + cookieMap.putAll(customCookieMap) + val newCookie = CookieStore.mapToCookie(cookieMap) + newCookie?.let { + headerMap.put("Cookie", it) + } } return when { method == RequestMethod.POST -> { @@ -312,6 +318,16 @@ class AnalyzeUrl( if (type != null) { return Res(url, StringUtils.byteToHexString(getResponseBytes(tag))) } + val cookie = CookieStore.getCookie(tag) + if (cookie.isNotEmpty()) { + val cookieMap = CookieStore.cookieToMap(cookie) + val customCookieMap = CookieStore.cookieToMap(headerMap.get("Cookie") ?: "") + cookieMap.putAll(customCookieMap) + val newCookie = CookieStore.mapToCookie(cookieMap) + newCookie?.let { + headerMap.put("Cookie", it) + } + } if (useWebView) { val params = AjaxWebView.AjaxParams(url) params.headerMap = headerMap @@ -322,10 +338,6 @@ class AnalyzeUrl( params.tag = tag return HttpHelper.ajax(params) } - val cookie = CookieStore.getCookie(tag) - if (cookie.isNotEmpty()) { - headerMap["Cookie"] += ";${cookie}" - } val res = when { method == RequestMethod.POST -> { if (fieldMap.isNotEmpty()) { @@ -356,7 +368,13 @@ class AnalyzeUrl( if (tag != null) { val cookie = CookieStore.getCookie(tag) if (cookie.isNotEmpty()) { - headerMap["Cookie"] += ";${cookie}" + val cookieMap = CookieStore.cookieToMap(cookie) + val customCookieMap = CookieStore.cookieToMap(headerMap.get("Cookie") ?: "") + cookieMap.putAll(customCookieMap) + val newCookie = CookieStore.mapToCookie(cookieMap) + newCookie?.let { + headerMap.put("Cookie", it) + } } } val response = when { From c9ba317fa9aff2dadfa6e4c8d778b71611d53f14 Mon Sep 17 00:00:00 2001 From: AndyBernie Date: Fri, 23 Oct 2020 21:20:57 +0800 Subject: [PATCH 3/3] update log --- app/src/main/assets/updateLog.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 10b2e6acb..430408e94 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -6,7 +6,11 @@ **2020/10/23** * 修复选择错误的bug * 修复长图最后一张不能滚动的bug -* js添加java.getCookie(sourceUrl:String, key:String ?=null)来获取登录后的cookie by [AndyBernie](https://github.com/AndyBernie) +* js添加java.getCookie(sourceUrl:String, key:String? = null)来获取登录后的cookie by [AndyBernie](https://github.com/AndyBernie) +``` +java.getCookie("http://baidu.com", null) => userid=1234;pwd=adbcd +java.getCookie("http://baidu.com", "userid") => 1234 +``` * 修复简繁转换没有处理标题 **2020/10/21**