diff --git a/app/src/main/java/com/github/catvod/net/OkHttp.java b/app/src/main/java/com/github/catvod/net/OkHttp.java index 9dc1772b..ce12ee67 100644 --- a/app/src/main/java/com/github/catvod/net/OkHttp.java +++ b/app/src/main/java/com/github/catvod/net/OkHttp.java @@ -101,6 +101,6 @@ public class OkHttp { } public static OkHttpClient.Builder getBuilder() { - return new OkHttpClient.Builder().dns(dns()).connectTimeout(30, TimeUnit.SECONDS).readTimeout(30, TimeUnit.SECONDS).writeTimeout(30, TimeUnit.SECONDS).hostnameVerifier(SSLCompat.VERIFIER).sslSocketFactory(new SSLCompat(), SSLCompat.TM); + return new OkHttpClient.Builder().addInterceptor(new OkhttpInterceptor()).dns(dns()).connectTimeout(30, TimeUnit.SECONDS).readTimeout(30, TimeUnit.SECONDS).writeTimeout(30, TimeUnit.SECONDS).hostnameVerifier(SSLCompat.VERIFIER).sslSocketFactory(new SSLCompat(), SSLCompat.TM); } } diff --git a/app/src/main/java/com/github/catvod/net/OkhttpInterceptor.java b/app/src/main/java/com/github/catvod/net/OkhttpInterceptor.java new file mode 100644 index 00000000..5d6b61c3 --- /dev/null +++ b/app/src/main/java/com/github/catvod/net/OkhttpInterceptor.java @@ -0,0 +1,52 @@ +package com.github.catvod.net; + +import com.github.catvod.utils.Utils; +import com.google.common.net.HttpHeaders; + +import org.checkerframework.checker.nullness.qual.NonNull; + +import java.io.IOException; +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 OkhttpInterceptor implements Interceptor { + + @Override + public Response intercept(Chain chain) throws IOException { + Response response = chain.proceed(getRequest(chain)); + String encoding = response.header(HttpHeaders.CONTENT_ENCODING); + if (response.body() == null || encoding == null || !encoding.equals("deflate")) return response; + InflaterInputStream is = new InflaterInputStream(response.body().byteStream(), new Inflater(true)); + return response.newBuilder().headers(response.headers()).body(new ResponseBody() { + @Override + public MediaType contentType() { + return response.body().contentType(); + } + + @Override + public long contentLength() { + return response.body().contentLength(); + } + + @NonNull + @Override + public BufferedSource source() { + return Okio.buffer(Okio.source(is)); + } + }).build(); + } + + private Request getRequest(@NonNull Chain chain) { + Request request = chain.request(); + if (request.url().host().equals("gitcode.net")) return request.newBuilder().addHeader(HttpHeaders.USER_AGENT, Utils.CHROME).build(); + return request; + } +} diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 1ec0e127..a4c54701 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 ff2e3bba..9234582d 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -8a9d215c9f79d7e5ce9e223b40ed81e8 +e7ecd94c00583729f5ee1a87370573ef