Optimize Interceptor

pull/496/head
FongMi 2 years ago
parent 562967883f
commit 81c2d9facc
  1. 7
      catvod/src/main/java/com/github/catvod/net/OkCookieJar.java
  2. 4
      catvod/src/main/java/com/github/catvod/net/OkHttp.java
  3. 33
      catvod/src/main/java/com/github/catvod/net/interceptor/RequestInterceptor.java
  4. 20
      catvod/src/main/java/com/github/catvod/net/interceptor/ResponseInterceptor.java
  5. 1
      quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.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) {
}
}

@ -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;
}

@ -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());
}
}

@ -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);

@ -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())));
}

Loading…
Cancel
Save