From 81c2d9facc89f3347a5f97b937d31cf15d2d830d Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 20 Apr 2024 22:16:50 +0800 Subject: [PATCH] Optimize Interceptor --- .../com/github/catvod/net/OkCookieJar.java | 7 ++-- .../java/com/github/catvod/net/OkHttp.java | 4 ++- .../net/interceptor/RequestInterceptor.java | 33 +++++++++++++++++++ .../ResponseInterceptor.java} | 20 ++--------- .../com/fongmi/quickjs/utils/Connect.java | 1 - 5 files changed, 43 insertions(+), 22 deletions(-) create mode 100644 catvod/src/main/java/com/github/catvod/net/interceptor/RequestInterceptor.java rename catvod/src/main/java/com/github/catvod/net/{OkInterceptor.java => interceptor/ResponseInterceptor.java} (70%) diff --git a/catvod/src/main/java/com/github/catvod/net/OkCookieJar.java b/catvod/src/main/java/com/github/catvod/net/OkCookieJar.java index f4b3ded10..338e989b1 100644 --- a/catvod/src/main/java/com/github/catvod/net/OkCookieJar.java +++ b/catvod/src/main/java/com/github/catvod/net/OkCookieJar.java @@ -25,9 +25,10 @@ public class OkCookieJar implements CookieJar { } public static void sync(String url, String cookie) { - if (TextUtils.isEmpty(cookie)) return; - for (String split : cookie.split(";")) { - CookieManager.getInstance().setCookie(url, split); + try { + if (TextUtils.isEmpty(cookie)) return; + for (String split : cookie.split(";")) CookieManager.getInstance().setCookie(url, split); + } catch (Throwable ignored) { } } 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 b7933b1fe..e9d5974d1 100644 --- a/catvod/src/main/java/com/github/catvod/net/OkHttp.java +++ b/catvod/src/main/java/com/github/catvod/net/OkHttp.java @@ -6,6 +6,8 @@ import android.text.TextUtils; import androidx.collection.ArrayMap; import com.github.catvod.bean.Doh; +import com.github.catvod.net.interceptor.ResponseInterceptor; +import com.github.catvod.net.interceptor.RequestInterceptor; import com.github.catvod.utils.Path; import java.net.ProxySelector; @@ -138,7 +140,7 @@ public class OkHttp { } private static OkHttpClient.Builder getBuilder() { - OkHttpClient.Builder builder = new OkHttpClient.Builder().cookieJar(new OkCookieJar()).addNetworkInterceptor(new OkInterceptor()).connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS).readTimeout(TIMEOUT, TimeUnit.MILLISECONDS).writeTimeout(TIMEOUT, TimeUnit.MILLISECONDS).dns(dns()).hostnameVerifier((hostname, session) -> true).followRedirects(true).sslSocketFactory(getSSLContext().getSocketFactory(), trustAllCertificates()); + OkHttpClient.Builder builder = new OkHttpClient.Builder().cookieJar(new OkCookieJar()).addInterceptor(new RequestInterceptor()).addNetworkInterceptor(new ResponseInterceptor()).connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS).readTimeout(TIMEOUT, TimeUnit.MILLISECONDS).writeTimeout(TIMEOUT, TimeUnit.MILLISECONDS).dns(dns()).hostnameVerifier((hostname, session) -> true).followRedirects(true).sslSocketFactory(getSSLContext().getSocketFactory(), trustAllCertificates()); builder.proxySelector(get().proxy ? selector() : defaultSelector); return builder; } 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 new file mode 100644 index 000000000..e010d0898 --- /dev/null +++ b/catvod/src/main/java/com/github/catvod/net/interceptor/RequestInterceptor.java @@ -0,0 +1,33 @@ +package com.github.catvod.net.interceptor; + +import androidx.annotation.NonNull; + +import com.github.catvod.Proxy; +import com.github.catvod.net.OkCookieJar; +import com.github.catvod.utils.Util; +import com.google.common.net.HttpHeaders; + +import java.io.IOException; +import java.net.URI; + +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; + +public class RequestInterceptor implements Interceptor { + + @NonNull + @Override + public Response intercept(@NonNull Chain chain) throws IOException { + Request request = chain.request(); + URI uri = request.url().uri(); + String url = request.url().toString(); + Request.Builder builder = request.newBuilder(); + OkCookieJar.sync(url, request.header(HttpHeaders.COOKIE)); + boolean local = url.contains(":" + Proxy.getPort() + "/"); + if (url.contains("+") && local) builder.url(url.replace("+", "%2B")); + if (url.contains("gitcode.net")) builder.header(HttpHeaders.USER_AGENT, Util.CHROME); + if (uri.getUserInfo() != null) builder.header(HttpHeaders.AUTHORIZATION, Util.basic(uri.getUserInfo())); + return chain.proceed(builder.build()); + } +} diff --git a/catvod/src/main/java/com/github/catvod/net/OkInterceptor.java b/catvod/src/main/java/com/github/catvod/net/interceptor/ResponseInterceptor.java similarity index 70% rename from catvod/src/main/java/com/github/catvod/net/OkInterceptor.java rename to catvod/src/main/java/com/github/catvod/net/interceptor/ResponseInterceptor.java index fca8c04e0..27a494f12 100644 --- a/catvod/src/main/java/com/github/catvod/net/OkInterceptor.java +++ b/catvod/src/main/java/com/github/catvod/net/interceptor/ResponseInterceptor.java @@ -1,33 +1,30 @@ -package com.github.catvod.net; +package com.github.catvod.net.interceptor; import android.net.Uri; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import com.github.catvod.Proxy; import com.github.catvod.utils.Util; import com.google.common.net.HttpHeaders; import java.io.IOException; -import java.net.URI; import java.util.zip.Inflater; import java.util.zip.InflaterInputStream; import okhttp3.Interceptor; import okhttp3.MediaType; -import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; import okio.BufferedSource; import okio.Okio; -public class OkInterceptor implements Interceptor { +public class ResponseInterceptor implements Interceptor { @NonNull @Override public Response intercept(@NonNull Chain chain) throws IOException { - Response response = chain.proceed(getRequest(chain.request())); + Response response = chain.proceed(chain.request()); String location = response.header(HttpHeaders.LOCATION); String encoding = response.header(HttpHeaders.CONTENT_ENCODING); if (response.isRedirect() && location != null) checkAuth(response, location); @@ -35,17 +32,6 @@ public class OkInterceptor implements Interceptor { return response; } - private Request getRequest(Request request) { - URI uri = request.url().uri(); - String url = request.url().toString(); - Request.Builder builder = request.newBuilder(); - boolean local = url.contains(":" + Proxy.getPort() + "/"); - if (url.contains("+") && local) builder.url(url.replace("+", "%2B")); - if (url.contains("gitcode.net")) builder.header(HttpHeaders.USER_AGENT, Util.CHROME); - if (uri.getUserInfo() != null) builder.header(HttpHeaders.AUTHORIZATION, Util.basic(uri.getUserInfo())); - return builder.build(); - } - private void checkAuth(Response response, String location) { try { Uri uri = Uri.parse(location); diff --git a/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java b/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java index 2caecea90..0c6cbcf45 100644 --- a/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java +++ b/quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java @@ -26,7 +26,6 @@ import okhttp3.Response; public class Connect { public static Call to(String url, Req req) { - OkCookieJar.sync(url, req.getHeader().get(HttpHeaders.COOKIE)); OkHttpClient client = OkHttp.client(req.isRedirect(), req.getTimeout()); return client.newCall(getRequest(url, req, Headers.of(req.getHeader()))); }