Cómo obtener cookies en HttpUrlConnection usando CookieStore?
En mi clase de Application
, hago lo siguiente:
public class MyApplication extends Application { private static HttpURLConnection conn = null; public static CookieStore cookieStore; public static HttpContext localContext; public static DefaultHttpClient client = new DefaultHttpClient(); @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); CookieSyncManager.createInstance(this); cookieStore = new BasicCookieStore(); localContext = new BasicHttpContext(); localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); } ... }
Y tengo una conexión en Runnable
partes Runnable
:
- Android HTTPUrlConnection: cómo establecer los datos de la entrada en el cuerpo de http?
- HttpUrlConnection de Android: Publicar Multipart
- HttpURLConnection.getInputStream siempre lanza IOException en android 2.1
- Usando HttpURLConnection y HttpsURLConnection para conectarse a un https?
- SSLHandshakeException: Excepción de certificado utilizando HttpURLConnetion con Android 4.2.2
HttpURLConnection conn = null; URL url; try { url = new URL(requestUrl); conn = (HttpURLConnection) url.openConnection(); if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) { System.setProperty("http.keepAlive", "false"); } conn.setConnectTimeout(8000); conn.setRequestMethod(method); conn.setInstanceFollowRedirects(false); conn.setRequestProperty("Content-Type","application/x-www-form-urlendcoded"); MyApplication app = (MyApplication) mContext.getApplicationContext(); ******************************************* if(app.cookieStore.getCookies()!=null){ conn.setRequestProperty("Cookie", app.cookieStore.getCookies().toString()); Log.d("tag", "cookie get " + cookie.getCookie(mContext.getString(R.string.host_url))); } ********** this part not work ********** Map m = conn.getHeaderFields(); if (m.containsKey("Set-Cookie")) { String cookies = ""; Collection c = (Collection) m.get("Set-Cookie"); for (Iterator i = c.iterator(); i.hasNext();) { cookies += (String) i.next() + ","; } cookie.setCookie(mContext.getString(R.string.host_url), cookies); Log.d("tag", "cookie set " + cookies); } } catch(...) { ... }
Cookiee
usando cookieStore
y también fijo las galletas, pero no consigo nada, él devuelve null
.
¿Cómo usar CookieStore
?
Un ejemplo y una respuesta dan esto:
List<Cookie> cookies = app.client.getCookieStore().getCookies();
También devuelve null
para mí.
- HttpURLConnection de Android y URL con caracteres especiales
- Android, HttpURLConnection y manejo de credenciales incorrectas
- Error de NetworkOnMainThreadException en jellybean
- La sincronización bidireccional para las cookies entre HttpURLConnection (java.net.CookieManager) y WebView (android.webkit.CookieManager)
- HttpURLConnection envío de la solicitud JSON POST a Apache / PHP
- Cómo desconectar una HttpUrlConnection en teléfonos HTC (Froyo y abajo)?
- Android FileNotFound Exception - No se puede getInputStream desde la URL de la imagen que no tiene formato de archivo
- HTTPURLConnection - POST multipart / form-data con archivo grande con FixedLengthStreamingMode
Utilícelo para configurar las cookies.
Primero, configure upcookieManager:
cookieManager = new java.net.CookieManager(); CookieHandler.setDefault(cookieManager); cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
A continuación, establezca las cookies en HttpUrlConnection por setRequestProperty ()
if (cookieManager.getCookieStore().getCookies().size() > 0) { List<HttpCookie> cookies = cookieManager.getCookieStore().getCookies(); if (cookies != null) { for (HttpCookie cookie : cookies) { conn.setRequestProperty("Cookie", cookie.getName() + "=" + cookie.getValue()); } } }
Set cookie:
conn.setRequestProperty("Cookie", "cookieName=cookieValue; domain=www.test.com");
Obtener cookie:
Map<String, List<String>> headerFields = conn.getHeaderFields(); List<String> cookiesHeader = headerFields.get("Set-Cookie"); if(cookiesHeader != null){ String cookie = cookiesHeader.get(0); HttpCookie httpCookie = HttpCookie.parse(cookie).get(0); String name = httpCookie.getName(); String value = httpCookie.getValue() String domain = httpCookie.getDomain(); }