diff --git a/app/build.gradle b/app/build.gradle index 7bb70a8e..667cd70d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,7 +57,7 @@ android { dependencies { implementation 'com.github.thegrizzlylabs:sardine-android:0.9' - implementation 'wang.harlon.quickjs:wrapper-android:2.0.0' + implementation 'wang.harlon.quickjs:wrapper-android:2.0.0' implementation 'com.squareup.okhttp3:okhttp:3.12.13' implementation 'com.google.code.gson:gson:2.11.0' implementation 'cn.wanghaomiao:JsoupXpath:2.5.1' @@ -66,6 +66,7 @@ dependencies { implementation 'org.jsoup:jsoup:1.15.3' implementation 'androidx.core:core-ktx:1.10.1' testImplementation "io.github.dokar3:quickjs-kt-jvm:1.0.0-alpha13" + testImplementation 'org.nanohttpd:nanohttpd:2.3.1' // Required -- JUnit 4 framework testImplementation 'junit:junit:4.12' @@ -74,8 +75,8 @@ dependencies { testImplementation "org.robolectric:robolectric:4.13" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1" //implementation 'wang.harlon.quickjs:wrapper-java:1.0.0' - // implementation(ext: 'aar', name: 'quickjs', group: 'fongmi', version: 'release') - // api 'wang.harlon.quickjs:wrapper-android:2.0.0' + // implementation(ext: 'aar', name: 'quickjs', group: 'fongmi', version: 'release') + // api 'wang.harlon.quickjs:wrapper-android:2.0.0' } \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/Proxy.java b/app/src/main/java/com/github/catvod/spider/Proxy.java index 525c2459..e87b4b61 100644 --- a/app/src/main/java/com/github/catvod/spider/Proxy.java +++ b/app/src/main/java/com/github/catvod/spider/Proxy.java @@ -6,6 +6,7 @@ import com.github.catvod.crawler.Spider; import com.github.catvod.crawler.SpiderDebug; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.ProxyVideo; +import com.github.catvod.utils.Util; import com.google.gson.Gson; import java.io.ByteArrayInputStream; @@ -40,12 +41,12 @@ public class Proxy extends Spider { private static final List keys = Arrays.asList("url", "header", "do", "Content-Type", "User-Agent", "Host"); private static Object[] commonProxy(Map params) throws Exception { - String url = new String(Base64.decode(params.get("url"),Base64.DEFAULT), Charset.defaultCharset()); - Map header = new Gson().fromJson(new String(Base64.decode(params.get("header"),Base64.DEFAULT), Charset.defaultCharset()), Map.class); + String url = Util.base64Decode(params.get("url")); + Map header = new Gson().fromJson(Util.base64Decode(params.get("header")), Map.class); if (header == null) header = new HashMap<>(); - for (Map.Entry entry : params.entrySet()) { + /* for (Map.Entry entry : params.entrySet()) { if (!keys.contains(entry.getKey())) header.put(entry.getKey(), entry.getValue()); - } + }*/ return ProxyVideo.proxy(url, header); } diff --git a/app/src/test/java/ProxyTest.java b/app/src/test/java/ProxyTest.java new file mode 100644 index 00000000..6ccbb8b9 --- /dev/null +++ b/app/src/test/java/ProxyTest.java @@ -0,0 +1,37 @@ +import android.app.Application; +import com.github.catvod.net.OkHttp; +import com.github.catvod.net.OkResult; +import com.github.catvod.server.Server; +import com.github.catvod.utils.Json; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import org.junit.Assert; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +import java.util.ArrayList; +import java.util.Arrays; + +@RunWith(RobolectricTestRunner.class) +public class ProxyTest { + // @Mock + private Application mockContext; + + + @org.junit.Before + public void setUp() throws Exception { + Server.get().start(); + } + + @org.junit.Test + public void homeContent() throws Exception { + + + + OkResult result = OkHttp.get("http://127.0.0.1:9978/proxy?do=proxy&url=aHR0cHM6Ly92aWRlby1wbGF5LWMtemIuZHJpdmUucXVhcmsuY24vb3Y3c2RmbnMvNjc4OTQ0MDk3MC9hYWE3NGQyNTBhOWU0OGJiOTE0M2JhYjI3NzkyN2YzMTY2NTczMmI4LzY2NTczMmI4YTI4NzQ1NzZlM2ZlNDljYzliNTY3MGExMmMyYTBmYmQ/YXV0aF9rZXk9MTcyNDkzMDM2OC0yMTIxMTE0LTEwODAwLWJiNWVmYTU3OWI3OTc5NWI1ZDU1OTY2ZGY3YTJlNzVjJnNwPTE2MTcmdG9rZW49My00MTA5MDUzYmMyMzMzYTc2Yzc2MzRiODNmYTdjNGUxYy04LTItMjQyNS02OGQ5XzE4NDRkMGM3NTJiMTg4ZGUxYzVhZWY4MjMxNzc4N2JiLTAtMC0wLTAtMjMxM2U1MmFkMzNkODA5ZjgwOTg3NzBhODg1YjVhNWQmdWQ9MTYtNC0xLTItMS01LTctTi0xLTE2LTItTg==&header=eyJDb29raWUiOiJiLXVzZXItaWRcdTAwM2Q4OWVkZTM0ZS0wZWZjLWUxZGQtYzk5Ny1mMTZhYWE3OTJkMGM7IF9VUF9BNEFfMTFfXHUwMDNkd2I5NjYxYzZkZmI2NDJmODhmNzNkOGUwYzdlZGQzOTg7IGItdXNlci1pZFx1MDAzZDg5ZWRlMzRlLTBlZmMtZTFkZC1jOTk3LWYxNmFhYTc5MmQwYzsgY3Rva2VuXHUwMDNkd2xhNnAzRVVPTHluMUZTQjhJS3AxU0VXOyBncmV5LWlkXHUwMDNkNTU4M2UzMmItMzlkZi00YmYwLWYzOWYtMWFkZjgzZjYwNGEyOyBncmV5LWlkLnNpZ1x1MDAzZHA4UmVCSU1HMkJlWnUxc1l2c3VPQVp4WWJ4LU1WcnNmS0VpQ3Y4N01zVE07IGlzUXVhcmtcdTAwM2R0cnVlOyBpc1F1YXJrLnNpZ1x1MDAzZGhVZ3FPYnlrcUZvbTVZMDlibGw5NFQxc1M5YWJUMVgtNERmX2x6Z2w4bk07IF9VUF9GN0VfOERfXHUwMDNkWmt5dlZIbnJCTHAxQTFORkpJaldpMFB3S0xPVmJ4SlBjZzBSelFQSTZLbUJ0VjZaTWdQaDM4bDkzcGd1YmdIRFFxaGFaMlNmYzBxdiUyQlJhbnRiZmcxbVdHQVVwUk1QNFJxWFA3OFd2dSUyRkNmdmtXV0djNU5oQ1RWNzF0R09JR2dEQlIzJTJCdTYlMkZqajQ0S2xFNWJpU05ET1dXN0JpZ2N6Mjdsdk9UaWR6Tnc4cyUyRld0S0FJeFdibkN6Wm40JTJGSk1CVXViMVNJTWNXODlnNTdrNG1mUG1EbENncFpLenh3bDZiZVNmZHRaNFJVV1htWk9uNXY1Tmt4VktoVTR3UjBQcTdOa2xjekVHZFJxMm5JQWN1N3YyMlV3Mm8lMkZ4TVkweEJkZUM5S29ybTUlMkZOSG54bDZLJTJCZDZGWFNvVDlhM1hJTVFPMzU5YXVaUGlaV3pyTmxaZSUyQnFuT2FoWGN4N0tBaFFJUnFTT2FwU21MNHlnSm9yNHI1aXNKaFJ1RG9YeTd2SkFWdUglMkZSRHRFSko4clpUcTBCZEMyM0J6JTJCME1yc2RnYkslMkJpVzsgX1VQX0RfXHUwMDNkcGM7IF9fd3BrcmVwb3J0ZXJ3aWRfXHUwMDNkM2QzZjc0YTctOTliNy00OTE2LTNmNzgtOTExZmMyZWI5ZDg3OyB0ZnN0a1x1MDAzZGZJb1pOeGpuYmhLd1BPdTBUV1o0THNhUnFpclRjdWRTU21OYm54RDBDNVZnQ2xNbTh4TXlCLUdzblN1NHRqcE9mbEFPbVNELTlQTmlHbDEyMFhyZ2tWTmIxU3JxSGJKQk4zdFNCQUVZb1FPV1ZVVWc5cVo4bjFiR0drRDNDcUdZSU5LU0JBQmhqblhncDNfVnl3ejZnU2MwU3lqM0JXZjBtcjJETFcyNGVaZmlpb3ZFS1dlZmoxcTBzd3EzRTgyaU5FTWluTXk3U0xyY3BBNEZoM3pfWkFWaUNmaWgzUGJ0ZFc1Tl9EdVU3N0FhVGlqbVlSa0wyV3E1NEVOb3k1YTdaWHhDYm9rMzNYelM3UVNaZ3hELW95b1ZzZEdvdHFsMHAyZFZ1N3VtQzRuTFN0YmlMbVBhcmM0RkVMSHJJLWMwdTJkUFZScnM4em9aV0tDbkliTlpybEhmVUNNVXoyejhLeVhWU2xnU0ZtVW9qaDU4T3plcVR6Z3dhR2xsNFlDWUt3Y3REVjVjb1AyTEw3OWVLSHhwTlRYSG1yZTFrWlUzMkpQV0NSX0FrUDJMTDc5ZUxaUVktV2VVTmR3MS47IF9fcHVzXHUwMDNkMjA1MWM4MjI4NTE5OWQ4YmU1NTNiZTQxZGQ1YTIxMDBBQVErbW12MzVHNEZERFo1eCszTWhlMk9NYk5nd2VRMU9EYlc4ekR0OVl1UDFMUVZxSFV1QUF6OUtXTHNQanBOdGltMEFWR0h1c040TUNvc1RtYnEva2hNOyBfX2twXHUwMDNkZTY2MDQxMjAtNjA1MS0xMWVmLWJmZTQtYzMxYjZjZGQwNzY2OyBfX2twc1x1MDAzZEFBVGNaQXJWZ1M3NkVQbjBGTWFWNEhFajsgX19rdGRcdTAwM2RzaWkvaXo0ZVB6RWFvVmlyWHVsN1FRXHUwMDNkXHUwMDNkOyBfX3VpZFx1MDAzZEFBVGNaQXJWZ1M3NkVQbjBGTWFWNEhFajsgX19pdHJhY2Vfd2lkXHUwMDNkNTgyOWI5NWQtZGFjMS00OGQzLWJmZDUtZjYwY2Q5NDYyNzg2OyBfX3B1dXNcdTAwM2RhYzczZWQ0NWQ4YTJjNzIyZjdiZTM2NjM3ZTIxNGI3NEFBVHAvcTgvUXVwVDdJaUJSMUdXcVpoeHR1am9sUWVxK2VqcWVqT3NvRUdtT1E2ZHFlVXVzS0R1SU1IM3Zva2NHQU94UzlrUFlGZjBmSXdQa3F2TGRSaWdIYTBSZWQzZVFCblV5R2RrY0pMRGxaRWdtdTF2cmlLOEIyeXE4dklYeTdpb3ltM3ZXWGd1N0N1Q0JjQ0VYUkVpcWdhUVR1b1U4azY0QTVMNzNESzdPKzBrejdzRGcxTDFiSEJCWmxlWGUrR2hCdnczNkdJc0wyQkRRYmtCVkJNcCIsIlVzZXItQWdlbnQiOiJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBxdWFyay1jbG91ZC1kcml2ZS8yLjUuMjAgQ2hyb21lLzEwMC4wLjQ4OTYuMTYwIEVsZWN0cm9uLzE4LjMuNS40LWI0Nzg0OTExMDAgU2FmYXJpLzUzNy4zNiBDaGFubmVsL3Bja2tfb3RoZXJfY2giLCJSZWZlcmVyIjoiaHR0cHM6Ly9wYW4ucXVhcmsuY24vIn0=", null, null); + System.out.println(result); + } + + +} \ No newline at end of file diff --git a/app/src/test/java/WoggTest.java b/app/src/test/java/WoggTest.java index c0eb49ea..21569c3e 100644 --- a/app/src/test/java/WoggTest.java +++ b/app/src/test/java/WoggTest.java @@ -1,5 +1,6 @@ import android.app.Application; +import com.github.catvod.server.Server; import com.github.catvod.spider.Init; import com.github.catvod.spider.Jianpian; import com.github.catvod.spider.Wogg; @@ -30,6 +31,7 @@ public class WoggTest { mockContext = RuntimeEnvironment.application; Init.init(mockContext); spider = new Wogg(); + Server.get().start(); spider.init(mockContext, "{\"cookie\":\"b-user-id=89ede34e-0efc-e1dd-c997-f16aaa792d0c; _UP_A4A_11_=wb9661c6dfb642f88f73d8e0c7edd398; b-user-id=89ede34e-0efc-e1dd-c997-f16aaa792d0c; ctoken=wla6p3EUOLyn1FSB8IKp1SEW; grey-id=5583e32b-39df-4bf0-f39f-1adf83f604a2; grey-id.sig=p8ReBIMG2BeZu1sYvsuOAZxYbx-MVrsfKEiCv87MsTM; isQuark=true; isQuark.sig=hUgqObykqFom5Y09bll94T1sS9abT1X-4Df_lzgl8nM; _UP_F7E_8D_=ZkyvVHnrBLp1A1NFJIjWi0PwKLOVbxJPcg0RzQPI6KmBtV6ZMgPh38l93pgubgHDQqhaZ2Sfc0qv%2BRantbfg1mWGAUpRMP4RqXP78Wvu%2FCfvkWWGc5NhCTV71tGOIGgDBR3%2Bu6%2Fjj44KlE5biSNDOWW7Bigcz27lvOTidzNw8s%2FWtKAIxWbnCzZn4%2FJMBUub1SIMcW89g57k4mfPmDlCgpZKzxwl6beSfdtZ4RUWXmZOn5v5NkxVKhU4wR0Pq7NklczEGdRq2nIAcu7v22Uw2o%2FxMY0xBdeC9Korm5%2FNHnxl6K%2Bd6FXSoT9a3XIMQO359auZPiZWzrNlZe%2BqnOahXcx7KAhQIRqSOapSmL4ygJor4r5isJhRuDoXy7vJAVuH%2FRDtEJJ8rZTq0BdC23Bz%2B0MrsdgbK%2BiW; _UP_D_=pc; __wpkreporterwid_=3d3f74a7-99b7-4916-3f78-911fc2eb9d87; tfstk=fIoZNxjnbhKwPOu0TWZ4LsaRqirTcudSSmNbnxD0C5VgClMm8xMyB-GsnSu4tjpOflAOmSD-9PNiGl120XrgkVNb1SrqHbJBN3tSBAEYoQOWVUUg9qZ8n1bGGkD3CqGYINKSBABhjnXgp3_Vywz6gSc0Syj3BWf0mr2DLW24eZfiiovEKWefj1q0swq3E82iNEMinMy7SLrcpA4Fh3z_ZAViCfih3PbtdW5N_DuU77AaTijmYRkL2Wq54ENoy5a7ZXxCbok33XzS7QSZgxD-oyoVsdGotql0p2dVu7umC4nLStbiLmParc4FELHrI-c0u2dPVRrs8zoZWKCnIbNZrlHfUCMUz2z8KyXVSlgSFmUojh58OzeqTzgwaGll4YCYKwctDV5coP2LL79eKHxpNTXHmre1kZU32JPWCR_AkP2LL79eLZQY-WeUNdw1.; __pus=2051c82285199d8be553be41dd5a2100AAQ+mmv35G4FDDZ5x+3Mhe2OMbNgweQ1ODbW8zDt9YuP1LQVqHUuAAz9KWLsPjpNtim0AVGHusN4MCosTmbq/khM; __kp=e6604120-6051-11ef-bfe4-c31b6cdd0766; __kps=AATcZArVgS76EPn0FMaV4HEj; __ktd=sii/iz4ePzEaoVirXul7QQ==; __uid=AATcZArVgS76EPn0FMaV4HEj; __itrace_wid=5829b95d-dac1-48d3-bfd5-f60cd9462786; __puus=7da0b96cb710fa1b376934485f977e05AATp/q8/QupT7IiBR1GWqZhxlIRT677smMvoHlLxQA0Lk6CkP0YJBOTl+p9DZgzlMz6w4hPXPgWsokukk8PW7ZfhFfPmv8tKMgLpCGLW+tk57luhNghmSdTeVPkAF59STtyCPBEtiNzNAd/zZJ6qILJDi5ywEBAAAg+gOyWHoLHNUR+QxeHRuQa8g5WWA95J8jebIlrr8rCvI1vjTbtiYktT\",\"token\":\"26fc6787afff43e78b78992e782502f1\"}"); } @@ -94,4 +96,6 @@ public class WoggTest { System.out.println("searchContent--" + gson.toJson(map)); Assert.assertFalse(map.getAsJsonArray("list").isEmpty()); } + + } \ No newline at end of file diff --git a/app/src/test/java/com/github/catvod/server/Nano.java b/app/src/test/java/com/github/catvod/server/Nano.java new file mode 100644 index 00000000..436a15b1 --- /dev/null +++ b/app/src/test/java/com/github/catvod/server/Nano.java @@ -0,0 +1,92 @@ +package com.github.catvod.server; + + +import com.google.common.net.HttpHeaders; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import fi.iki.elonen.NanoHTTPD; + +public class Nano extends NanoHTTPD { + + private List process; + + public Nano(int port) { + super(port); + addProcess(); + } + + private void addProcess() { + process = new ArrayList<>(); + + process.add(new Proxy()); + } + + public static Response success() { + return success("OK"); + } + + public static Response success(String text) { + return newFixedLengthResponse(Response.Status.OK, MIME_PLAINTEXT, text); + } + + public static Response error(String text) { + return error(Response.Status.INTERNAL_ERROR, text); + } + + public static Response error(Response.IStatus status, String text) { + return newFixedLengthResponse(status, MIME_PLAINTEXT, text); + } + + public static Response redirect(String url, Map headers) { + Response response = newFixedLengthResponse(Response.Status.REDIRECT, MIME_HTML, ""); + for (Map.Entry entry : headers.entrySet()) response.addHeader(entry.getKey(), entry.getValue()); + response.addHeader(HttpHeaders.LOCATION, url); + return response; + } + + @Override + public Response serve(IHTTPSession session) { + String url = session.getUri().trim(); + Map files = new HashMap<>(); + if (session.getMethod() == Method.POST) parse(session, files); + if (url.contains("?")) url = url.substring(0, url.indexOf('?')); + + for (Process process : process) + if (process.isRequest(session, url)) return process.doResponse(session, url, files); + return null; + } + + private void parse(IHTTPSession session, Map files) { + String ct = session.getHeaders().get("content-type"); + if (ct != null && ct.toLowerCase().contains("multipart/form-data") && !ct.toLowerCase().contains("charset=")) { + Matcher matcher = Pattern.compile("[ |\t]*(boundary[ |\t]*=[ |\t]*['|\"]?[^\"^'^;^,]*['|\"]?)", Pattern.CASE_INSENSITIVE).matcher(ct); + String boundary = matcher.find() ? matcher.group(1) : null; + if (boundary != null) + session.getHeaders().put("content-type", "multipart/form-data; charset=utf-8; " + boundary); + } + try { + session.parseBody(files); + } catch (Exception ignored) { + } + } + + + @Override + public void start() throws IOException { + super.start(); + + } + + @Override + public void stop() { + super.stop(); + + } +} diff --git a/app/src/test/java/com/github/catvod/server/Process.java b/app/src/test/java/com/github/catvod/server/Process.java new file mode 100644 index 00000000..00fc9005 --- /dev/null +++ b/app/src/test/java/com/github/catvod/server/Process.java @@ -0,0 +1,12 @@ +package com.github.catvod.server; + +import java.util.Map; + +import fi.iki.elonen.NanoHTTPD; + +public interface Process { + + boolean isRequest(NanoHTTPD.IHTTPSession session, String path); + + NanoHTTPD.Response doResponse(NanoHTTPD.IHTTPSession session, String path, Map files); +} diff --git a/app/src/test/java/com/github/catvod/server/Proxy.java b/app/src/test/java/com/github/catvod/server/Proxy.java new file mode 100644 index 00000000..d9a8e568 --- /dev/null +++ b/app/src/test/java/com/github/catvod/server/Proxy.java @@ -0,0 +1,34 @@ +package com.github.catvod.server; + + +import java.io.InputStream; +import java.util.Map; + +import fi.iki.elonen.NanoHTTPD; + +public class Proxy implements Process { + + @Override + public boolean isRequest(NanoHTTPD.IHTTPSession session, String path) { + return "/proxy".equals(path); + } + + @Override + public NanoHTTPD.Response doResponse(NanoHTTPD.IHTTPSession session, String path, Map files) { + try { + + Map params = session.getParms(); + params.putAll(session.getHeaders()); + Object[] rs = com.github.catvod.spider.Proxy.proxy(params); + if (rs[0] instanceof NanoHTTPD.Response) return (NanoHTTPD.Response) rs[0]; + NanoHTTPD.Response response = NanoHTTPD.newChunkedResponse(NanoHTTPD.Response.Status.lookup((Integer) rs[0]), (String) rs[1], (InputStream) rs[2]); + if (rs.length > 3 && rs[3] != null) + for (Map.Entry entry : ((Map) rs[3]).entrySet()) + response.addHeader(entry.getKey(), entry.getValue()); + return response; + } catch (Exception e) { + return Nano.error(e.getMessage()); + } + } + +} diff --git a/app/src/test/java/com/github/catvod/server/Server.java b/app/src/test/java/com/github/catvod/server/Server.java new file mode 100644 index 00000000..7a846c07 --- /dev/null +++ b/app/src/test/java/com/github/catvod/server/Server.java @@ -0,0 +1,66 @@ +package com.github.catvod.server; + + +import com.github.catvod.crawler.SpiderDebug; + +public class Server { + + + private Nano nano; + private int port; + + private static class Loader { + static volatile Server INSTANCE = new Server(); + } + + public static Server get() { + return Loader.INSTANCE; + } + + public Server() { + this.port = 9978; + } + + public int getPort() { + return port; + } + + + public String getAddress() { + return getAddress(false); + } + + public String getAddress(int tab) { + return getAddress(false) + "?tab=" + tab; + } + + public String getAddress(String path) { + return getAddress(true) + path; + } + + public String getAddress(boolean local) { + return "http://" + (local ? "127.0.0.1" : "127.0.0.1") + ":" + getPort(); + } + + public void start() { + if (nano != null) return; + do { + try { + nano = new Nano(port); + // Proxy.set(port); + nano.start(); + System.out.println("server start at:" + port); + break; + } catch (Exception e) { + ++port; + nano.stop(); + nano = null; + } + } while (port < 9999); + } + + public void stop() { + if (nano != null) nano.stop(); + nano = null; + } +} diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 94591dbf..38a48e03 100644 Binary files a/jar/custom_spider.jar and b/jar/custom_spider.jar differ diff --git a/jar/custom_spider.jar.md5 b/jar/custom_spider.jar.md5 index f4b46271..81724fab 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -a160908c93959ce7d1f91533e9083096 +d97df3dc4d21b9de101d27c824b39176 diff --git a/json/index.json b/json/index.json index 9b68c674..81f8b46c 100644 --- a/json/index.json +++ b/json/index.json @@ -1,5 +1,5 @@ { - "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;a160908c93959ce7d1f91533e9083096", + "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;d97df3dc4d21b9de101d27c824b39176", "lives": [ { "name": "直播ipv6", diff --git a/json/index1.json b/json/index1.json index c44301fa..3960b0cf 100644 --- a/json/index1.json +++ b/json/index1.json @@ -1,5 +1,5 @@ { - "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;a160908c93959ce7d1f91533e9083096", + "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;d97df3dc4d21b9de101d27c824b39176", "lives": [ { "name": "直播ipv6", diff --git a/json/index2.json b/json/index2.json index 476c6736..d20504de 100644 --- a/json/index2.json +++ b/json/index2.json @@ -1,5 +1,5 @@ { - "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;a160908c93959ce7d1f91533e9083096", + "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;d97df3dc4d21b9de101d27c824b39176", "lives": [ { "name": "直播ipv6",