From eae252920b45ce0b7e99489dfcefac45573822b5 Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 8 Feb 2025 23:17:15 +0800 Subject: [PATCH] Fix bug --- .../net/interceptor/ResponseInterceptor.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) 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 b33a1869b..e90f184fa 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 @@ -8,6 +8,8 @@ import com.google.common.net.HttpHeaders; import java.io.IOException; import java.net.URI; +import java.util.HashMap; +import java.util.Map; import java.util.zip.Inflater; import java.util.zip.InflaterInputStream; @@ -21,22 +23,33 @@ import okio.Okio; public class ResponseInterceptor implements Interceptor { + private final Map redirect; + + public ResponseInterceptor() { + this.redirect = new HashMap<>(); + } + @NonNull @Override public Response intercept(@NonNull Chain chain) throws IOException { - Response response = chain.proceed(checkUser(chain)); - String encoding = response.header(HttpHeaders.CONTENT_ENCODING); - if ("deflate".equals(encoding)) return deflate(response); + Request request = chain.request(); + Response response = chain.proceed(checkUser(request)); + if ("deflate".equals(response.header(HttpHeaders.CONTENT_ENCODING))) return deflate(response); + if (response.code() == 302) redirect.put(response.header(HttpHeaders.LOCATION), request.url().toString()); + if (response.code() == 406 && redirect.containsKey(request.url().toString())) return redirect(request, response); return response; } - private Request checkUser(Chain chain) { - Request request = chain.request(); + private Request checkUser(Request request) { URI uri = request.url().uri(); if (uri.getUserInfo() == null) return request; return request.newBuilder().header(HttpHeaders.AUTHORIZATION, Util.basic(uri.getUserInfo())).build(); } + private Response redirect(Request request, Response response) { + return new Response.Builder().request(request).protocol(response.protocol()).code(302).message("Found").header(HttpHeaders.LOCATION, redirect.get(request.url().toString())).build(); + } + private Response deflate(Response response) { InflaterInputStream is = new InflaterInputStream(response.body().byteStream(), new Inflater(true)); return response.newBuilder().headers(response.headers()).body(new ResponseBody() {