
org.rx.net.http.CookieContainer Maven / Gradle / Ivy
package org.rx.net.http;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import okhttp3.Cookie;
import okhttp3.CookieJar;
import okhttp3.HttpUrl;
import org.rx.net.http.cookie.CookieCache;
import org.rx.net.http.cookie.MemoryCookieCache;
import org.rx.net.http.cookie.CookiePersistor;
import org.rx.net.http.cookie.MemoryCookiePersistor;
public final class CookieContainer implements CookieJar {
final CookieCache cache;
final CookiePersistor persistor;
public CookieContainer() {
this(new MemoryCookieCache(), new MemoryCookiePersistor());
}
public CookieContainer(CookieCache cache, CookiePersistor persistor) {
this.cache = cache;
this.persistor = persistor;
this.cache.addAll(persistor.loadAll());
}
@Override
public synchronized void saveFromResponse(HttpUrl url, List cookies) {
cache.addAll(cookies);
persistor.saveAll(filterPersistentCookies(cookies));
}
private static List filterPersistentCookies(List cookies) {
List persistentCookies = new ArrayList<>();
for (Cookie cookie : cookies) {
if (cookie.persistent()) {
persistentCookies.add(cookie);
}
}
return persistentCookies;
}
@Override
public synchronized List loadForRequest(HttpUrl url) {
List cookiesToRemove = new ArrayList<>();
List validCookies = new ArrayList<>();
for (Iterator it = cache.iterator(); it.hasNext(); ) {
Cookie currentCookie = it.next();
if (isCookieExpired(currentCookie)) {
cookiesToRemove.add(currentCookie);
it.remove();
} else if (currentCookie.matches(url)) {
validCookies.add(currentCookie);
}
}
persistor.removeAll(cookiesToRemove);
return validCookies;
}
private static boolean isCookieExpired(Cookie cookie) {
return cookie.expiresAt() < System.currentTimeMillis();
}
public synchronized void clearSession() {
cache.clear();
cache.addAll(persistor.loadAll());
}
public synchronized void clear() {
cache.clear();
persistor.clear();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy