From 0ba9e277e3954f10212b160a2fd594e9decf6dac Mon Sep 17 00:00:00 2001 From: FongMi Date: Fri, 2 May 2025 21:15:18 +0800 Subject: [PATCH] Fix bug --- .../android/tv/api/config/LiveConfig.java | 1 + .../android/tv/api/config/VodConfig.java | 1 + .../java/com/github/catvod/net/OkHttp.java | 1 + .../net/interceptor/RequestInterceptor.java | 12 ++++---- .../net/interceptor/ResponseInterceptor.java | 29 ++++++++++++++++++- 5 files changed, 37 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java index 4cb20aef1..c053f11fb 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java @@ -270,6 +270,7 @@ public class LiveConfig { public void setHeaders(List items) { OkHttp.requestInterceptor().setHeaders(items); + OkHttp.responseInterceptor().setHeaders(items); } public void setHosts(List hosts) { diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java index 229311d4f..485d168e6 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java @@ -258,6 +258,7 @@ public class VodConfig { public void setHeaders(List items) { OkHttp.requestInterceptor().setHeaders(items); + OkHttp.responseInterceptor().setHeaders(items); } public List getFlags() { diff --git a/catvod/src/main/java/com/github/catvod/net/OkHttp.java b/catvod/src/main/java/com/github/catvod/net/OkHttp.java index 278594120..b8905735e 100644 --- a/catvod/src/main/java/com/github/catvod/net/OkHttp.java +++ b/catvod/src/main/java/com/github/catvod/net/OkHttp.java @@ -66,6 +66,7 @@ public class OkHttp { selector().clear(); authInterceptor().clear(); requestInterceptor().clear(); + responseInterceptor().clear(); } public void setDoh(Doh doh) { diff --git a/catvod/src/main/java/com/github/catvod/net/interceptor/RequestInterceptor.java b/catvod/src/main/java/com/github/catvod/net/interceptor/RequestInterceptor.java index 20f6cab42..3c0441495 100644 --- a/catvod/src/main/java/com/github/catvod/net/interceptor/RequestInterceptor.java +++ b/catvod/src/main/java/com/github/catvod/net/interceptor/RequestInterceptor.java @@ -51,16 +51,16 @@ public class RequestInterceptor implements Interceptor { return chain.proceed(builder.build()); } + private void checkAuth(HttpUrl url, Request.Builder builder) { + String auth = url.queryParameter("auth"); + if (auth != null) authMap.put(url.host(), auth); + if (authMap.containsKey(url.host()) && auth == null) builder.url(url.newBuilder().addQueryParameter("auth", authMap.get(url.host())).build()); + } + private void checkHeader(HttpUrl url, Request.Builder builder) { if (!headerMap.containsKey(url.host())) return; for (Map.Entry entry : headerMap.get(url.host()).entrySet()) { builder.header(entry.getKey(), entry.getValue().getAsString()); } } - - private void checkAuth(HttpUrl url, Request.Builder builder) { - String auth = url.queryParameter("auth"); - if (auth != null) authMap.put(url.host(), auth); - if (authMap.containsKey(url.host()) && auth == null) builder.url(url.newBuilder().addQueryParameter("auth", authMap.get(url.host())).build()); - } } diff --git a/catvod/src/main/java/com/github/catvod/net/interceptor/ResponseInterceptor.java b/catvod/src/main/java/com/github/catvod/net/interceptor/ResponseInterceptor.java index 3ab480982..e3394518f 100644 --- a/catvod/src/main/java/com/github/catvod/net/interceptor/ResponseInterceptor.java +++ b/catvod/src/main/java/com/github/catvod/net/interceptor/ResponseInterceptor.java @@ -3,9 +3,14 @@ package com.github.catvod.net.interceptor; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.github.catvod.utils.Json; import com.google.common.net.HttpHeaders; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import java.io.IOException; +import java.util.List; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.zip.Inflater; import java.util.zip.InflaterInputStream; @@ -21,15 +26,29 @@ import okio.Okio; public class ResponseInterceptor implements Interceptor { private final ConcurrentHashMap redirectMap; + private final ConcurrentHashMap headerMap; public ResponseInterceptor() { + headerMap = new ConcurrentHashMap<>(); redirectMap = new ConcurrentHashMap<>(); } + public synchronized void setHeaders(List items) { + for (JsonElement item : items) { + JsonObject object = Json.safeObject(item); + headerMap.put(object.get("host").getAsString(), object.get("header").getAsJsonObject()); + } + } + + public void clear() { + headerMap.clear(); + redirectMap.clear(); + } + @NonNull @Override public Response intercept(@NonNull Chain chain) throws IOException { - Request request = chain.request(); + Request request = check(chain.request()); Response response = chain.proceed(request); if ("deflate".equals(response.header(HttpHeaders.CONTENT_ENCODING))) return deflate(response); if (response.code() == 406 && redirectMap.containsKey(request.url().toString())) return redirect(request, response); @@ -37,6 +56,14 @@ public class ResponseInterceptor implements Interceptor { return response; } + private Request check(Request request) { + String host = request.url().host(); + Request.Builder builder = request.newBuilder(); + if (!headerMap.containsKey(host)) return request; + for (Map.Entry entry : headerMap.get(host).entrySet()) builder.header(entry.getKey(), entry.getValue().getAsString()); + return builder.build(); + } + private Response redirect(Request request, Response response) { return new Response.Builder().request(request).protocol(response.protocol()).code(302).message("Found").header(HttpHeaders.LOCATION, redirectMap.get(request.url().toString())).build(); }