Add cookie jar

pull/321/head^2
FongMi 2 years ago
parent 5c23e36b79
commit d2ebbeaea6
  1. 14
      app/src/main/java/com/fongmi/android/tv/bean/Url.java
  2. 8
      app/src/main/java/com/fongmi/android/tv/gson/UrlAdapter.java
  3. 2
      catvod/src/main/java/com/github/catvod/crawler/Spider.java
  4. 4
      catvod/src/main/java/com/github/catvod/net/OkHttp.java
  5. 4
      catvod/src/main/java/com/github/catvod/net/OkInterceptor.java
  6. 52
      catvod/src/main/java/com/github/catvod/net/cookie/MemoryCookieJar.java
  7. 48
      catvod/src/main/java/com/github/catvod/net/cookie/WrappedCookie.java

@ -2,14 +2,28 @@ package com.fongmi.android.tv.bean;
import android.text.TextUtils;
import com.fongmi.android.tv.App;
import com.google.gson.JsonElement;
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
import java.util.List;
public class Url {
@SerializedName("values")
private List<Value> values;
@SerializedName("position")
private int position;
public static Url objectFrom(JsonElement element) {
try {
return App.gson().fromJson(element, Url.class);
} catch (Exception e) {
return create();
}
}
public static Url create() {
return new Url();
}

@ -13,9 +13,13 @@ public class UrlAdapter implements JsonDeserializer<Url> {
@Override
public Url deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
if (json.isJsonArray()) return convert(json.getAsJsonArray());
if (json.isJsonObject()) return Url.objectFrom(json);
return Url.create().add(json.getAsString());
}
private Url convert(JsonArray array) {
Url url = Url.create();
if (!json.isJsonArray()) return url.add(json.getAsString());
JsonArray array = json.getAsJsonArray();
for (int i = 0; i < array.size(); i += 2) url.add(array.get(i).getAsString(), array.get(i + 1).getAsString());
return url;
}

@ -67,7 +67,7 @@ public abstract class Spider {
return OkHttp.dns();
}
public OkHttpClient client() {
public static OkHttpClient client() {
return OkHttp.client();
}
}

@ -5,7 +5,7 @@ import android.text.TextUtils;
import androidx.collection.ArrayMap;
import com.github.catvod.bean.Doh;
import com.github.catvod.net.interceptor.DefaultInterceptor;
import com.github.catvod.net.cookie.MemoryCookieJar;
import com.github.catvod.utils.Path;
import java.net.ProxySelector;
@ -132,7 +132,7 @@ public class OkHttp {
}
private static OkHttpClient.Builder getBuilder() {
OkHttpClient.Builder builder = new OkHttpClient.Builder().addNetworkInterceptor(new DefaultInterceptor()).connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS).readTimeout(TIMEOUT, TimeUnit.MILLISECONDS).writeTimeout(TIMEOUT, TimeUnit.MILLISECONDS).dns(dns()).hostnameVerifier((hostname, session) -> true).sslSocketFactory(new SSLCompat(), SSLCompat.TM);
OkHttpClient.Builder builder = new OkHttpClient.Builder().addNetworkInterceptor(new OkInterceptor()).connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS).readTimeout(TIMEOUT, TimeUnit.MILLISECONDS).writeTimeout(TIMEOUT, TimeUnit.MILLISECONDS).dns(dns()).hostnameVerifier((hostname, session) -> true).followRedirects(true).cookieJar(new MemoryCookieJar()).sslSocketFactory(new SSLCompat(), SSLCompat.TM);
builder.proxySelector(get().proxy ? selector() : defaultSelector);
return builder;
}

@ -1,4 +1,4 @@
package com.github.catvod.net.interceptor;
package com.github.catvod.net;
import android.net.Uri;
@ -22,7 +22,7 @@ import okhttp3.ResponseBody;
import okio.BufferedSource;
import okio.Okio;
public class DefaultInterceptor implements Interceptor {
public class OkInterceptor implements Interceptor {
@NonNull
@Override

@ -0,0 +1,52 @@
package com.github.catvod.net.cookie;
import android.text.TextUtils;
import android.webkit.CookieManager;
import androidx.annotation.NonNull;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import okhttp3.Cookie;
import okhttp3.CookieJar;
import okhttp3.HttpUrl;
public class MemoryCookieJar implements CookieJar {
private final Set<WrappedCookie> cache;
private final CookieManager manager;
public MemoryCookieJar() {
cache = new HashSet<>();
manager = CookieManager.getInstance();
}
@NonNull
@Override
public synchronized List<Cookie> loadForRequest(@NonNull HttpUrl url) {
List<Cookie> items = new ArrayList<>();
for (WrappedCookie item : cache) if (item.isExpired()) cache.remove(item);
for (WrappedCookie item : cache) if (item.matches(url)) items.add(item.unwrap());
items.addAll(fromManager(url));
return items;
}
@Override
public synchronized void saveFromResponse(@NonNull HttpUrl url, List<Cookie> cookies) {
List<WrappedCookie> items = new ArrayList<>();
for (Cookie cookie : cookies) items.add(WrappedCookie.wrap(cookie));
for (Cookie cookie : cookies) manager.setCookie(url.toString(), cookie.toString());
cache.removeAll(items);
cache.addAll(items);
}
private List<Cookie> fromManager(HttpUrl url) {
List<Cookie> items = new ArrayList<>();
String cookie = manager.getCookie(url.toString());
if (!TextUtils.isEmpty(cookie)) for (String split : cookie.split(";")) items.add(Cookie.parse(url, split));
return items;
}
}

@ -0,0 +1,48 @@
package com.github.catvod.net.cookie;
import okhttp3.Cookie;
import okhttp3.HttpUrl;
public class WrappedCookie {
private final Cookie cookie;
public static WrappedCookie wrap(Cookie cookie) {
return new WrappedCookie(cookie);
}
private WrappedCookie(Cookie cookie) {
this.cookie = cookie;
}
public Cookie unwrap() {
return cookie;
}
public boolean isExpired() {
return cookie.expiresAt() < System.currentTimeMillis();
}
public boolean matches(HttpUrl url) {
return cookie.matches(url);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (!(obj instanceof WrappedCookie)) return false;
WrappedCookie it = (WrappedCookie) obj;
return cookie.name().equals(it.cookie.name()) && cookie.domain().equals(it.cookie.domain()) && cookie.path().equals(it.cookie.path()) && cookie.secure() == it.cookie.secure() && cookie.hostOnly() == it.cookie.hostOnly();
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + cookie.name().hashCode();
result = 31 * result + cookie.domain().hashCode();
result = 31 * result + cookie.path().hashCode();
result = 31 * result + (cookie.secure() ? 0 : 1);
result = 31 * result + (cookie.hostOnly() ? 0 : 1);
return result;
}
}
Loading…
Cancel
Save