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.

¿Fue útil?

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
scroll top