Java, dejó de funcionar CookieHandler en una sola instancia
Pregunta
No sé cómo funciona el sistema CookieHandler amplia, lo hice ver el origen de CookieHandler pero no encontró más información, excepto los métodos establecidos / GET. Donde las conexiones do TCP / HTTP utilizan instancia de CookieHandler, la cual di por
CookieHandler.setDefault(...)
¿Qué archivo fuente que debería referirse a? URLConnection
y HttpURLConnection
no parecen tener cosas que hacer con él.
Ayuda, gracias de antemano.
Editar ¿Es posible la aplicación de CookieHandler a sólo una instancia en la que se invoca
setDefault
.
Solución
Lo tengo trabajo mediante el uso de este
private static class DelegatingCookieManager extends CookieManager {
@Override public void setCookiePolicy(CookiePolicy cookiePolicy) {
delegate.get().setCookiePolicy(cookiePolicy);
}
@Override public CookieStore getCookieStore() {
return delegate.get().getCookieStore();
}
@Override public Map<String, List<String>> get(
URI uri, Map<String, List<String>> requestHeaders)
throws IOException {
return delegate.get().get(uri, requestHeaders);
}
@Override public void put(URI uri, Map<String,
List<String>> responseHeaders)
throws IOException {
delegate.get().put(uri, responseHeaders);
}
}
que se instala a nivel mundial
static {
CookieHandler.setDefault(new DelegatingCookieManager());
}
pero no tiene estado y delegado a un
private static final ThreadLocal<CookieManager> delegate =
new ThreadLocal<CookieManager>();
que obtiene una instancia de la clase donde se acostumbra
private final CookieManager ownCookieManager = new CookieManager();
como
delegate.set(ownCookieManager);
doRequest();
Otros consejos
El Javadoc para java.net.CookieManager
da una bastante buena visión general de cómo encaja en CookieHandler.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow