From 792feb5acdcbcb96b80c1e0fb8aaedc1734eb748 Mon Sep 17 00:00:00 2001 From: lushunming <1357197829@qq.com> Date: Sun, 20 Apr 2025 13:11:23 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=9A=82=E5=AD=98=EF=BC=8C=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E6=B2=A1=E8=A7=A3=E5=86=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../github/catvod/api/SimpleCookieJar.java | 109 +++++++----------- .../com/github/catvod/api/TianYiHandler.java | 97 ++++++++-------- .../java/com/github/catvod/api/TianyiApi.java | 19 ++- .../github/catvod/api/TianYiHandlerTest.java | 2 +- 4 files changed, 101 insertions(+), 126 deletions(-) diff --git a/app/src/main/java/com/github/catvod/api/SimpleCookieJar.java b/app/src/main/java/com/github/catvod/api/SimpleCookieJar.java index 8552fc51..b390f12d 100644 --- a/app/src/main/java/com/github/catvod/api/SimpleCookieJar.java +++ b/app/src/main/java/com/github/catvod/api/SimpleCookieJar.java @@ -6,14 +6,10 @@ import com.github.catvod.bean.tianyi.User; import com.github.catvod.crawler.SpiderDebug; import com.github.catvod.utils.Json; import com.github.catvod.utils.Path; -import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import okhttp3.Cookie; -import okhttp3.CookieJar; import okhttp3.HttpUrl; import org.apache.commons.lang3.StringUtils; -import org.jetbrains.annotations.NotNull; import java.io.File; import java.util.ArrayList; @@ -21,15 +17,15 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -public class SimpleCookieJar implements CookieJar { - private Map> cookieStore = new HashMap<>(); +public class SimpleCookieJar { + private Map> cookieStore = new HashMap<>(); private final Cache cache; - public Map> getCookieStore() { + public Map> getCookieStore() { return cookieStore; } - public void setCookieStore(Map> cookieStore) { + public void setCookieStore(Map> cookieStore) { this.cookieStore = cookieStore; } @@ -47,83 +43,66 @@ public class SimpleCookieJar implements CookieJar { return Path.tv("tianyi"); } - @Override - public void saveFromResponse(HttpUrl url, @NotNull List cookies) { - SpiderDebug.log("SimpleCookieJar saveFromResponse: " + url.host() + ": " + Json.toJson(cookies)); + + public void saveFromResponse(String url, List cookies) { + HttpUrl httpUrl = HttpUrl.parse(url); + SpiderDebug.log("SimpleCookieJar saveFromResponse: " + httpUrl.host() + ": " + Json.toJson(cookies)); // 创建可修改的 Cookie 列表副本 - List oldCookies = cookieStore.get(url.host()) != null ? cookieStore.get(url.host()) : new ArrayList<>(); - List newCookies = new ArrayList<>(oldCookies); + Map oldCookies = cookieStore.get(httpUrl.host()) != null ? cookieStore.get(httpUrl.host()) : new HashMap<>(); // 更新 Cookie - for (Cookie newCookie : cookies) { - // 移除同名的旧 Cookie - for (Cookie oldCookie : newCookies) { - if (oldCookie.name().equals(newCookie.name())) { - oldCookies.remove(oldCookie); - } + for (String newCookie : cookies) { + String[] split = newCookie.split(";"); + String cookieItem = split[0].trim(); + int equalsIndex = cookieItem.indexOf('='); + if (equalsIndex > 0) { + String key = cookieItem.substring(0, equalsIndex); + String value = equalsIndex < cookieItem.length() - 1 ? cookieItem.substring(equalsIndex + 1) : ""; + oldCookies.put(key, value); } } - oldCookies.addAll(cookies); - cookieStore.put(url.host(), oldCookies); + + cookieStore.put(httpUrl.host(), oldCookies); cache.setTianyiUser(User.objectFrom(Json.toJson(cookieStore))); SpiderDebug.log("SimpleCookieJar cookieStore: " + Json.toJson(cookieStore)); } - @Override - public @NotNull List loadForRequest(HttpUrl url) { - - - var cookies = cookieStore.get(url.host()); - SpiderDebug.log(" SimpleCookieJar loadForRequest: " + url.host() + ": " + Json.toJson(cookies)); - return cookies != null ? cookies : new ArrayList<>(); - } public void setGlobalCookie(JsonObject jsonObject) { + for (Map.Entry entry : jsonObject.entrySet()) { String key = entry.getKey(); - JsonArray value = entry.getValue().getAsJsonArray(); - for (JsonElement element : value) { - JsonObject cookieobj = element.getAsJsonObject(); - Cookie.Builder cookieBuilder = new Cookie.Builder().name(cookieobj.get("name").getAsString()).value(cookieobj.get("value").getAsString()) - - .expiresAt(cookieobj.get("expiresAt").getAsLong()).path(cookieobj.get("path").getAsString()); - - boolean secure = cookieobj.get("secure").getAsBoolean(); - if (secure) { - cookieBuilder.secure(); - } - - boolean httpOnly = cookieobj.get("httpOnly").getAsBoolean(); - if (httpOnly) { - cookieBuilder.httpOnly(); - } - boolean persistent = cookieobj.get("persistent").getAsBoolean(); - /* if (persistent) { - cookieBuilder.persistent(); - }*/ - boolean hostOnly = cookieobj.get("hostOnly").getAsBoolean(); - if (hostOnly) { - cookieBuilder.hostOnlyDomain(cookieobj.get("domain").getAsString()); - } else { - cookieBuilder.domain(cookieobj.get("domain").getAsString()); - - } - Cookie cookies = cookieBuilder.build(); - - - // 设置全局Cookie - List cookiesForHost = cookieStore.get(key) == null ? new ArrayList<>() : cookieStore.get(key); - cookiesForHost.add(cookies); - cookieStore.put(key, cookiesForHost); + JsonObject value = entry.getValue().getAsJsonObject(); + Map cookiesForHost = new HashMap<>(); + for (String k : value.keySet()) { + String cookieobj = value.get(k).getAsString(); + cookiesForHost.put(k, cookieobj); } + cookieStore.put(key, cookiesForHost); } } - public Map> getCookie() { - return cookieStore; + /** + * 根据请求URl获取cookie + * + * @param url + * @return + */ + public String loadForRequest(String url) { + HttpUrl httpUrl = HttpUrl.parse(url); + Map cookieMap = cookieStore.get(httpUrl.host()); + List cookieList = new ArrayList<>(); + if (cookieMap != null && cookieMap.size() > 0) { + for (String s : cookieMap.keySet()) { + cookieList.add(s + "=" + cookieMap.get(s)); + } + } + String cookie = StringUtils.join(cookieList, ";"); + SpiderDebug.log("SimpleCookieJar getCookie: url:" + httpUrl.host() + "cookie:" + cookie); + return cookie; } } \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/api/TianYiHandler.java b/app/src/main/java/com/github/catvod/api/TianYiHandler.java index ff51ab6f..169217b8 100644 --- a/app/src/main/java/com/github/catvod/api/TianYiHandler.java +++ b/app/src/main/java/com/github/catvod/api/TianYiHandler.java @@ -10,7 +10,7 @@ import android.widget.ImageView; import com.github.catvod.bean.tianyi.Cache; import com.github.catvod.bean.tianyi.User; import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.net.OkHttpWithCookie; +import com.github.catvod.net.OkHttp; import com.github.catvod.net.OkResult; import com.github.catvod.spider.Init; import com.github.catvod.utils.*; @@ -52,11 +52,15 @@ public class TianYiHandler { private SimpleCookieJar cookieJar; + public SimpleCookieJar getCookieJar() { + return cookieJar; + } + public TianYiHandler() { - - cache = Cache.objectFrom(Path.read(getCache())); cookieJar = new SimpleCookieJar(); + cache = Cache.objectFrom(Path.read(getCache())); + } public void cleanCookie() { @@ -64,52 +68,55 @@ public class TianYiHandler { cache.setTianyiUser(new User("")); } - public SimpleCookieJar getCookieJar() { - return cookieJar; - } - - public void setCookie(JsonObject cookie) { - cookieJar.setGlobalCookie(cookie); + private Map getHeader(String url) { + Map headers = new HashMap<>(); + headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + headers.put("Cookie", cookieJar.loadForRequest(url)); + return headers; } public void refreshCookie() throws IOException { String url = "https://cloud.189.cn/api/portal/loginUrl.action?redirectURL=https%3A%2F%2Fcloud.189.cn%2Fweb%2Fredirect.html&defaultSaveName=3&defaultSaveNameCheck=uncheck&browserId=16322f24d9405fb83331c3f6ce971b53"; - String index = OkHttpWithCookie.getLocation(url, Map.of("Cookie", ""), cookieJar); + String index = OkHttp.getLocation(url, getHeader(url)); SpiderDebug.log("index:" + index); SpiderDebug.log("index red: " + index); - Map> resHeaderMap = OkHttpWithCookie.getLocationHeader(index, Map.of("Cookie", ""), cookieJar); - - + Map> resHeaderMap = OkHttp.getLocationHeader(index, getHeader(index)); + saveCookie(resHeaderMap.get("Set-Cookie"), index); indexUrl = resHeaderMap.get("Location").get(0); SpiderDebug.log("indexUrl red: " + indexUrl); - OkResult okResult = OkHttpWithCookie.get(indexUrl, new HashMap<>(), Map.of("Cookie", ""), cookieJar); - + OkResult okResult = OkHttp.get(indexUrl, new HashMap<>(), getHeader(indexUrl)); + saveCookie(okResult.getResp().get("Set-Cookie"), indexUrl); SpiderDebug.log("refreshCookie header:" + Json.toJson(okResult.getResp())); } + /* + * 保存cookie + * + * @param cookie + * @param url + */ + private void saveCookie(List cookie, String url) { + if (cookie != null && cookie.size() > 0) { + cookieJar.saveFromResponse(url, cookie); + } + } + public byte[] startScan() throws Exception { - /* OkResult okResult1 = OkHttp.get("https://ux.21cn.com/api/htmlReportRest/getJs.js?pid=25577E0DEEDF48ADBD4459911F5825E4", new HashMap<>(), new HashMap<>()); - - getCookieMap(okResult1.getResp().get("Set-Cookie")); - this.cookie = mapToCookie(cookieMap);*/ SpiderDebug.log("index ori: " + "https://cloud.189.cn/api/portal/loginUrl.action?redirectURL=https%3A%2F%2Fcloud.189.cn%2Fweb%2Fredirect.html&defaultSaveName=3&defaultSaveNameCheck=uncheck&browserId=dff95dced0b03d9d972d920f03ddd05e"); - String index = OkHttpWithCookie.getLocation("https://cloud.189.cn/api/portal/loginUrl.action?redirectURL=https://cloud.189.cn/web/redirect.html&defaultSaveName=3&defaultSaveNameCheck=uncheck&browserId=8d38da4344fba4699d13d6e6854319d7", Map.of("Cookie", ""), cookieJar); + String index = OkHttp.getLocation("https://cloud.189.cn/api/portal/loginUrl.action?redirectURL=https://cloud.189.cn/web/redirect.html&defaultSaveName=3&defaultSaveNameCheck=uncheck&browserId=8d38da4344fba4699d13d6e6854319d7", Map.of("Cookie", "")); SpiderDebug.log("index red: " + index); - Map> resHeaderMap = OkHttpWithCookie.getLocationHeader(index, new HashMap<>(), cookieJar); + Map> resHeaderMap = OkHttp.getLocationHeader(index, getHeader(index)); + + saveCookie(resHeaderMap.get("Set-Cookie"), index); indexUrl = resHeaderMap.get("Location").get(0); SpiderDebug.log("indexUrl red: " + indexUrl); - - /* getCookieMap(resHeaderMap.get("Set-Cookie")); - this.cookie = mapToCookie(cookieMap); - SpiderDebug.log("secondCookie: " + cookie);*/ - HttpUrl httpParams = HttpUrl.parse(indexUrl); reqId = httpParams.queryParameter("reqId"); lt = httpParams.queryParameter("lt"); @@ -144,15 +151,13 @@ public class TianYiHandler { OkResult okResult; if ("GET".equals(method)) { - okResult = OkHttpWithCookie.get(this.API_URL + url, params, headers, cookieJar); + okResult = OkHttp.get(this.API_URL + url, params, headers); } else { - okResult = OkHttpWithCookie.post(this.API_URL + url, params, headers, cookieJar); + okResult = OkHttp.post(this.API_URL + url, params, headers); + } + if (okResult.getResp().get("Set-Cookie") != null) { + saveCookie(okResult.getResp().get("Set-Cookie"), this.API_URL); } - /* if (okResult.getResp().get("Set-Cookie") != null) { - geteCookieMap(okResult.getResp().get("Set-Cookie")); - this.ecookie = mapToCookie(ecookieMap); - SpiderDebug.log("cookie: " + this.ecookie); - }*/ if (okResult.getCode() != 200 && leftRetry > 0) { SpiderDebug.log("请求" + url + " failed;"); @@ -171,14 +176,14 @@ public class TianYiHandler { */ private @NotNull Result appConf() throws Exception { - Map tHeaders = new HashMap<>(); + Map tHeaders = getHeader(API_URL); tHeaders.put("Content-Type", "application/x-www-form-urlencoded"); tHeaders.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/76.0"); tHeaders.put("Referer", indexUrl); tHeaders.put("origin", API_URL); tHeaders.put("Lt", lt); tHeaders.put("Reqid", reqId); - //tHeaders.put("Cookie", secondCookie); + Map param = new HashMap<>(); param.put("version", "2.0"); @@ -195,6 +200,10 @@ public class TianYiHandler { return new Result(paramId, returnUrl); } + public void setCookie(JsonObject obj) { + cookieJar.setGlobalCookie(obj); + } + private static class Result { public final String paramId; public final String returnUrl; @@ -206,17 +215,6 @@ public class TianYiHandler { } - private static @NotNull List getCookieList(List cookie) { - List cookieList = new ArrayList<>(); - for (String s : cookie) { - String[] split = s.split(";"); - String cookie1 = split[0]; - cookieList.add(cookie1); - } - return cookieList; - } - - public JsonObject getUUID() throws InterruptedException { Map params = new HashMap<>(); params.put("appId", "cloud"); @@ -245,7 +243,7 @@ public class TianYiHandler { HttpUrl url = HttpUrl.parse(API_URL + "/api/logbox/oauth2/image.do?uuid=" + uuid + "&REQID=" + reqId).newBuilder().build(); Request request = new Request.Builder().url(url).headers(Headers.of(headers)).build(); - Response response = OkHttpWithCookie.newCall(request, cookieJar); + Response response = OkHttp.newCall(request); if (response.code() == 200) { return response.body().bytes(); } @@ -296,9 +294,8 @@ public class TianYiHandler { private void fetchUserInfo(String redirectUrl) throws IOException { - Map headers = new HashMap<>(); - - Map> okResult = OkHttpWithCookie.getLocationHeader(redirectUrl, headers, cookieJar); + Map> okResult = OkHttp.getLocationHeader(redirectUrl, getHeader(redirectUrl)); + saveCookie(okResult.get("Set-Cookie"), redirectUrl); SpiderDebug.log("扫码返回数据:" + Json.toJson(okResult)); if (okResult.containsKey("set-cookie")) { diff --git a/app/src/main/java/com/github/catvod/api/TianyiApi.java b/app/src/main/java/com/github/catvod/api/TianyiApi.java index 31efaea1..4c13352f 100644 --- a/app/src/main/java/com/github/catvod/api/TianyiApi.java +++ b/app/src/main/java/com/github/catvod/api/TianyiApi.java @@ -6,14 +6,13 @@ import com.github.catvod.bean.Vod; import com.github.catvod.bean.tianyi.Item; import com.github.catvod.bean.tianyi.ShareData; import com.github.catvod.crawler.SpiderDebug; -import com.github.catvod.net.OkHttpWithCookie; +import com.github.catvod.net.OkHttp; import com.github.catvod.net.OkResult; import com.github.catvod.spider.Init; import com.github.catvod.utils.*; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import okhttp3.Cookie; import org.apache.commons.lang3.StringUtils; import java.io.File; @@ -53,7 +52,7 @@ public class TianyiApi { JsonObject obj = Json.safeObject(token); //初始化CookieJar if (Objects.nonNull(obj)) { - tianYiHandler.setCookie(obj); + //TODO tianYiHandler.setCookie(obj); } } if (cookieJar.getCookieStore().size() == 0) { @@ -145,9 +144,9 @@ public class TianyiApi { header.remove("Content-Type"); List cookies = new ArrayList<>(); for (String s : tianYiHandler.getCookieJar().getCookieStore().keySet()) { - for (Cookie cookie : tianYiHandler.getCookieJar().getCookieStore().get(s)) { + /*TODO for (Cookie cookie : tianYiHandler.getCookieJar().getCookieStore().get(s)) { cookies.add(cookie.name() + "=" + cookie.value()); - } + }*/ } header.put("Cookie", TextUtils.join(";", cookies)); return Result.get().url(ProxyVideo.buildCommonProxyUrl(playUrl, header)).octet().header(header).string(); @@ -170,9 +169,9 @@ public class TianyiApi { OkResult okResult; if ("GET".equals(method)) { - okResult = OkHttpWithCookie.get(this.apiUrl + url, params, getHeaders(), cookieJar); + okResult = OkHttp.get(this.apiUrl + url, params, getHeaders()); } else { - okResult = OkHttpWithCookie.post(this.apiUrl + url, Json.toJson(data), getHeaders(), cookieJar); + okResult = OkHttp.post(this.apiUrl + url, Json.toJson(data), getHeaders()); } /* if (okResult.getResp().get("Set-Cookie") != null) { Matcher matcher = Pattern.compile("__puus=([^;]+)").matcher(StringUtils.join(okResult.getResp().get("Set-Cookie"), ";;;")); @@ -235,13 +234,13 @@ public class TianyiApi { private String getUserBriefInfo() throws Exception { - OkResult result = OkHttpWithCookie.get("https://cloud.189.cn/api/portal/v2/getUserBriefInfo.action", new HashMap<>(), getHeaders(), cookieJar); + OkResult result = OkHttp.get("https://cloud.189.cn/api/portal/v2/getUserBriefInfo.action", new HashMap<>(), getHeaders()); JsonObject obj = Json.safeObject(result.getBody()); return obj.get("sessionKey") == null ? "" : obj.get("sessionKey").getAsString(); } private String getUserSizeInfo() throws Exception { - OkResult result = OkHttpWithCookie.get("https://cloud.189.cn/api/portal/getUserSizeInfo.action", new HashMap<>(), getHeaders(), cookieJar); + OkResult result = OkHttp.get("https://cloud.189.cn/api/portal/getUserSizeInfo.action", new HashMap<>(), getHeaders()); JsonObject res = Json.safeObject(result.getBody()); if (StringUtils.isAllBlank(result.getBody()) || (Objects.nonNull(res.get("errorCode")) && res.get("errorCode").getAsString().equals("InvalidSessionKey"))) { // tianYiHandler.startScan(); @@ -373,7 +372,7 @@ public class TianyiApi { private String getDownload(String shareId, String fileId) throws Exception { Map headers = getHeaders(); //headers.remove("sessionKey"); - OkResult result = OkHttpWithCookie.get("https://cloud.189.cn/api/portal/getNewVlcVideoPlayUrl.action?shareId=" + shareId + "&dt=1&fileId=" + fileId + "&type=4&key=noCache", new HashMap<>(), headers, cookieJar); + OkResult result = OkHttp.get("https://cloud.189.cn/api/portal/getNewVlcVideoPlayUrl.action?shareId=" + shareId + "&dt=1&fileId=" + fileId + "&type=4&key=noCache", new HashMap<>(), headers); JsonObject res = Json.safeObject(result.getBody()); if (Objects.nonNull(res.get("res_code")) && res.get("res_code").getAsInt() == 0) { diff --git a/app/src/test/java/com/github/catvod/api/TianYiHandlerTest.java b/app/src/test/java/com/github/catvod/api/TianYiHandlerTest.java index da113f7a..bf5208c2 100644 --- a/app/src/test/java/com/github/catvod/api/TianYiHandlerTest.java +++ b/app/src/test/java/com/github/catvod/api/TianYiHandlerTest.java @@ -37,7 +37,7 @@ public class TianYiHandlerTest { @Test public void refreshCookie() throws Exception { - JsonObject obj = Json.safeObject("{\"open.e.189.cn\":[{\"name\":\"SSON\",\"value\":\"dc466c8192e3109eaea837c1d136c1fd065253ce1c7d3a66ca1520d7d6d6307b10a1fe65c7becac73b95f24a6e681e654ec4f47c39533ebcc48bb78d6d6e63d1bbf3334e6e97eaa7092d34f87bf1209ee35f344871bc5a329eac34ae948d399d4a6b3b28a929c4f353ade0981657e9e0f09ce27cc1c15d8322c6e45a8ebb21eb431509f1dd7dc3a7856b32b0991d654d5ced73dd20b764ca8737600cbe699c37ccf59b3c610893fc42bdc08b477c5d394e290c14d175d1ca0ee9fa61a1a8dcac7007e9219fd0ae6ccd5dc760524213f85b6b8c6166af01a31336dab797d9118010b81a5a3c26e08e\",\"expiresAt\":253402300799999,\"domain\":\"e.189.cn\",\"path\":\"/\",\"secure\":true,\"httpOnly\":true,\"persistent\":true,\"hostOnly\":false},{\"name\":\"GUID\",\"value\":\"525d8874e53e46a7ba3ed8907e9fef1f\",\"expiresAt\":1775176321000,\"domain\":\"e.189.cn\",\"path\":\"/\",\"secure\":false,\"httpOnly\":false,\"persistent\":true,\"hostOnly\":false},{\"name\":\"pageOp\",\"value\":\"336b9ddc820212fa6c9b5a0cfd7bf5b3\",\"expiresAt\":253402300799999,\"domain\":\"e.189.cn\",\"path\":\"/\",\"secure\":false,\"httpOnly\":false,\"persistent\":false,\"hostOnly\":false},{\"name\":\"OPENINFO\",\"value\":\"33c28688ef52ce9e3a9ef87388047efbde5e3e2e4c7ef6ef267632468c7dfaf294ff59fa59d34801\",\"expiresAt\":253402300799999,\"domain\":\"e.189.cn\",\"path\":\"/\",\"secure\":false,\"httpOnly\":true,\"persistent\":false,\"hostOnly\":false},{\"name\":\"GRAYNUMBER\",\"value\":\"319DE3F68C8730862F3BEF66F3D635B7\",\"expiresAt\":1775177653000,\"domain\":\"e.189.cn\",\"path\":\"/\",\"secure\":false,\"httpOnly\":false,\"persistent\":true,\"hostOnly\":false}],\"cloud.189.cn\":[{\"name\":\"JSESSIONID\",\"value\":\"431787526C43DF21B6373E914FE597EC\",\"expiresAt\":253402300799999,\"domain\":\"cloud.189.cn\",\"path\":\"/\",\"secure\":false,\"httpOnly\":true,\"persistent\":false,\"hostOnly\":true},{\"name\":\"COOKIE_LOGIN_USER\",\"value\":\"0C7407F59A6E5896EB6B777056E160DB020BAE67B121B5930CCD4777073744055308F7E8CD03F2FC2399E4823F60ECDD74120CEE4C529017\",\"expiresAt\":253402300799999,\"domain\":\"cloud.189.cn\",\"path\":\"/\",\"secure\":false,\"httpOnly\":true,\"persistent\":false,\"hostOnly\":false}]}"); + JsonObject obj = Json.safeObject("{\"open.e.189.cn\":{\"OPENINFO\":\"33c28688ef52ce9e3a9ef87388047efbde5e3e2e4c7ef6ef267632468c7dfaf294ff59fa59d34801\",\"pageOp\":\"f69c75fdedccb502a36c77a24e680020\",\"LT\":\"855366f756091e07\",\"GUID\":\"3956b8eff8b746ecb6529247e942ede9\",\"SSON\":\"dc466c8192e3109eaea837c1d136c1fd065253ce1c7d3a66ca1520d7d6d6307b10a1fe65c7becac73b95f24a6e681e654ec4f47c39533ebcc48bb78d6d6e63d1bbf3334e6e97eaa7092d34f87bf1209ebf5e9fb0cc4acaa19d9244741def867ce3c66f9d8bebba20bbd3850b11abcbf331d1f434623686850171e7f6e60c3af4726febb62ca26b017bf79babc487db070293d8276d861fcaadc58148255113ad473bd52c732bb1c22a095f1a6e76c6ec643eb5cc5fde4629f50d5cd9fd69397c3548cfd8377e57b4793588d4b4707cd037d43c42927c74878296e13016a6974dba12aee0c9d53fa7\"},\"cloud.189.cn\":{\"JSESSIONID\":\"2378013FE97769100CA550798FE9C7A0\",\"COOKIE_LOGIN_USER\":\"CEFA57A70B075914732B7BAB853E481AFC04F65870A4D9D68AD677D97C78BE91C0613178466B68B1E91E2DC5DAF6FAED798CCA1676AAF3D1\"}}"); tianYiHandler.setCookie(obj); tianYiHandler.refreshCookie(); From 3809a09f445bdb2c8b6949f7dedb20ffc1fec707 Mon Sep 17 00:00:00 2001 From: lushunming <1357197829@qq.com> Date: Mon, 21 Apr 2025 15:28:26 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=A4=A9=E7=BF=BC=E6=89=AB=E7=A0=81bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../github/catvod/api/SimpleCookieJar.java | 12 ++++-- .../com/github/catvod/api/TianYiHandler.java | 38 ++++++++++++------- .../java/com/github/catvod/api/TianyiApi.java | 2 +- .../github/catvod/api/TianYiHandlerTest.java | 2 +- 4 files changed, 35 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/github/catvod/api/SimpleCookieJar.java b/app/src/main/java/com/github/catvod/api/SimpleCookieJar.java index b390f12d..21a80ed1 100644 --- a/app/src/main/java/com/github/catvod/api/SimpleCookieJar.java +++ b/app/src/main/java/com/github/catvod/api/SimpleCookieJar.java @@ -8,7 +8,7 @@ import com.github.catvod.utils.Json; import com.github.catvod.utils.Path; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import okhttp3.HttpUrl; + import org.apache.commons.lang3.StringUtils; import java.io.File; @@ -17,6 +17,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import okhttp3.HttpUrl; + public class SimpleCookieJar { private Map> cookieStore = new HashMap<>(); private final Cache cache; @@ -46,7 +48,8 @@ public class SimpleCookieJar { public void saveFromResponse(String url, List cookies) { HttpUrl httpUrl = HttpUrl.parse(url); - SpiderDebug.log("SimpleCookieJar saveFromResponse: " + httpUrl.host() + ": " + Json.toJson(cookies)); + SpiderDebug.log(" saveFromResponse url: " + url); + SpiderDebug.log(" saveFromResponse cookie : " + Json.toJson(cookies)); // 创建可修改的 Cookie 列表副本 Map oldCookies = cookieStore.get(httpUrl.host()) != null ? cookieStore.get(httpUrl.host()) : new HashMap<>(); @@ -65,7 +68,7 @@ public class SimpleCookieJar { cookieStore.put(httpUrl.host(), oldCookies); cache.setTianyiUser(User.objectFrom(Json.toJson(cookieStore))); - SpiderDebug.log("SimpleCookieJar cookieStore: " + Json.toJson(cookieStore)); + SpiderDebug.log(" cookieStore now: " + Json.toJson(cookieStore)); } @@ -102,7 +105,8 @@ public class SimpleCookieJar { } } String cookie = StringUtils.join(cookieList, ";"); - SpiderDebug.log("SimpleCookieJar getCookie: url:" + httpUrl.host() + "cookie:" + cookie); + SpiderDebug.log(" loadForRequest url:" + url); + SpiderDebug.log(" loadForRequest cookie:" + cookie); return cookie; } } \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/api/TianYiHandler.java b/app/src/main/java/com/github/catvod/api/TianYiHandler.java index 169217b8..ea120b56 100644 --- a/app/src/main/java/com/github/catvod/api/TianYiHandler.java +++ b/app/src/main/java/com/github/catvod/api/TianYiHandler.java @@ -7,29 +7,41 @@ import android.graphics.drawable.ColorDrawable; import android.view.Gravity; import android.widget.FrameLayout; import android.widget.ImageView; + import com.github.catvod.bean.tianyi.Cache; import com.github.catvod.bean.tianyi.User; import com.github.catvod.crawler.SpiderDebug; import com.github.catvod.net.OkHttp; import com.github.catvod.net.OkResult; import com.github.catvod.spider.Init; -import com.github.catvod.utils.*; +import com.github.catvod.utils.Json; +import com.github.catvod.utils.Notify; +import com.github.catvod.utils.Path; +import com.github.catvod.utils.QRCode; +import com.github.catvod.utils.ResUtil; import com.google.gson.JsonObject; -import okhttp3.Headers; -import okhttp3.HttpUrl; -import okhttp3.Request; -import okhttp3.Response; + import org.apache.commons.lang3.time.DateFormatUtils; import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.IOException; import java.net.URLEncoder; -import java.util.*; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Random; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import okhttp3.Headers; +import okhttp3.HttpUrl; +import okhttp3.Request; +import okhttp3.Response; + public class TianYiHandler { public static final String API_URL = "https://open.e.189.cn"; @@ -77,18 +89,18 @@ public class TianYiHandler { public void refreshCookie() throws IOException { - String url = "https://cloud.189.cn/api/portal/loginUrl.action?redirectURL=https%3A%2F%2Fcloud.189.cn%2Fweb%2Fredirect.html&defaultSaveName=3&defaultSaveNameCheck=uncheck&browserId=16322f24d9405fb83331c3f6ce971b53"; String index = OkHttp.getLocation(url, getHeader(url)); - SpiderDebug.log("index:" + index); - SpiderDebug.log("index red: " + index); + SpiderDebug.log("unifyAccountLogin:" + index); + Map> resHeaderMap = OkHttp.getLocationHeader(index, getHeader(index)); saveCookie(resHeaderMap.get("Set-Cookie"), index); indexUrl = resHeaderMap.get("Location").get(0); - SpiderDebug.log("indexUrl red: " + indexUrl); - OkResult okResult = OkHttp.get(indexUrl, new HashMap<>(), getHeader(indexUrl)); - saveCookie(okResult.getResp().get("Set-Cookie"), indexUrl); - SpiderDebug.log("refreshCookie header:" + Json.toJson(okResult.getResp())); + SpiderDebug.log("callbackUnify: " + indexUrl); + + Map> callbackUnify = OkHttp.getLocationHeader(indexUrl, getHeader(indexUrl)); + saveCookie(callbackUnify.get("Set-Cookie"), indexUrl); + SpiderDebug.log("refreshCookie header:" + Json.toJson(callbackUnify)); } diff --git a/app/src/main/java/com/github/catvod/api/TianyiApi.java b/app/src/main/java/com/github/catvod/api/TianyiApi.java index 4c13352f..855ed4db 100644 --- a/app/src/main/java/com/github/catvod/api/TianyiApi.java +++ b/app/src/main/java/com/github/catvod/api/TianyiApi.java @@ -384,7 +384,7 @@ public class TianyiApi { } } else if (res.get("errorCode") != null && res.get("errorCode").getAsString().equals("InvalidSessionKey")) { //刷新cookie - SpiderDebug.log("cookie 过期,刷新cookie。。。。"); + SpiderDebug.log("天意cookie 过期,刷新cookie。。。。"); tianYiHandler.refreshCookie(); //重试下载 SpiderDebug.log("重试下载。。。。"); diff --git a/app/src/test/java/com/github/catvod/api/TianYiHandlerTest.java b/app/src/test/java/com/github/catvod/api/TianYiHandlerTest.java index bf5208c2..32c2758e 100644 --- a/app/src/test/java/com/github/catvod/api/TianYiHandlerTest.java +++ b/app/src/test/java/com/github/catvod/api/TianYiHandlerTest.java @@ -37,7 +37,7 @@ public class TianYiHandlerTest { @Test public void refreshCookie() throws Exception { - JsonObject obj = Json.safeObject("{\"open.e.189.cn\":{\"OPENINFO\":\"33c28688ef52ce9e3a9ef87388047efbde5e3e2e4c7ef6ef267632468c7dfaf294ff59fa59d34801\",\"pageOp\":\"f69c75fdedccb502a36c77a24e680020\",\"LT\":\"855366f756091e07\",\"GUID\":\"3956b8eff8b746ecb6529247e942ede9\",\"SSON\":\"dc466c8192e3109eaea837c1d136c1fd065253ce1c7d3a66ca1520d7d6d6307b10a1fe65c7becac73b95f24a6e681e654ec4f47c39533ebcc48bb78d6d6e63d1bbf3334e6e97eaa7092d34f87bf1209ebf5e9fb0cc4acaa19d9244741def867ce3c66f9d8bebba20bbd3850b11abcbf331d1f434623686850171e7f6e60c3af4726febb62ca26b017bf79babc487db070293d8276d861fcaadc58148255113ad473bd52c732bb1c22a095f1a6e76c6ec643eb5cc5fde4629f50d5cd9fd69397c3548cfd8377e57b4793588d4b4707cd037d43c42927c74878296e13016a6974dba12aee0c9d53fa7\"},\"cloud.189.cn\":{\"JSESSIONID\":\"2378013FE97769100CA550798FE9C7A0\",\"COOKIE_LOGIN_USER\":\"CEFA57A70B075914732B7BAB853E481AFC04F65870A4D9D68AD677D97C78BE91C0613178466B68B1E91E2DC5DAF6FAED798CCA1676AAF3D1\"}}"); + JsonObject obj = Json.safeObject("{\"open.e.189.cn\":{\"OPENINFO\":\"33c28688ef52ce9e3a9ef87388047efbde5e3e2e4c7ef6ef267632468c7dfaf294ff59fa59d34801\",\"pageOp\":\"f73420158c5c010491f1faa4fc91870e\",\"LT\":\"a8900fc0ecae0c59\",\"GUID\":\"b959026ffdf84080ae8567afd9ea4c32\",\"SSON\":\"dc466c8192e3109eaea837c1d136c1fd065253ce1c7d3a66ca1520d7d6d6307b10a1fe65c7becac73b95f24a6e681e654ec4f47c39533ebcc48bb78d6d6e63d1bbf3334e6e97eaa7092d34f87bf1209e256cd4822db68da051a0aeb532d94408c8e50486347fc713813dafc5776a7cfa665ddf96837151232745aa2957fb441d8a79ca7d86f46452060794e6f4b5873ab99ed476629aed2c7b36a44613c92f925dcfd221fce142cd1ecaab667236df697ece293e3ca24030918e5b357bc193118772278748606ade7262bf25ae7527d3c8a059bd48fc08b53b182e61e543a7e9bd1562b50bf80438\"},\"cloud.189.cn\":{\"JSESSIONID\":\"12088774C4B78E632EB944ECA2E6705F\",\"COOKIE_LOGIN_USER\":\"24DA4CBA27A8388982710C2F3D55EFAA84AEE67E9B3EF1B7AC1C565BEEF24C562052CB9B5EAC85E733C10C2704225133CD625407C352ED5D\"}}"); tianYiHandler.setCookie(obj); tianYiHandler.refreshCookie();