2012-06-19 23 views
41

Tengo una aplicación que abre una URL en una vista web, el usuario debe iniciar sesión en un sitio a través de la vista web y recibe una cookie una vez que inició sesión. Tengo problemas para obtener cookies después iniciar sesión.Android - extracción de cookies después de iniciar sesión en webview

El problema es que puedo lograr esto usando android.webkit.CookieManager y genero todas las cookies en una sola cadena.

Sin embargo, quiero lograrlo usando una cookie store (como en java.net.CookieStore) así que necesito estar usando java.net.CookieManager.

Estoy usando el siguiente código dentro de onPageFinished() de un WebViewClient. Sé que el problema es abrir una nueva conexión, donde necesito obtener el contenido de la página actual. Te agradecería un poco de ayuda, gracias

 @Override 
     public void onPageFinished(WebView view, String url){ 

      Log.d(TAG, "Finished loading: " + url); 

      CookieSyncManager syncManager = CookieSyncManager.createInstance(Main.this); 
      syncManager.sync(); 

      CookieManager manager = new CookieManager(); 
      manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL); 
      CookieHandler.setDefault(manager); 

      try { 
       URL blah = new URL(url); 
       HttpURLConnection con = (HttpURLConnection) blah.openConnection(); 
       readStream(con.getInputStream()); // outputting html 
      } 
      catch (Exception e) { 
      } 

      CookieStore cookieJar = manager.getCookieStore(); 
      List<HttpCookie> cookies = cookieJar.getCookies(); 

      for (HttpCookie cookie: cookies) { 
       Log.d(TAG, "cookie name : "+cookie.getName().toString()); 
      } 
     } 
+0

ya ha respondido, pero está completo y podría ayudar a alguien, revise esta respuesta http://stackoverflow.com/a/15924948/1714030 –

Respuesta

56

Puede extraer todas las cookies URL actual de esta forma de vistas web como cadena:

@Override 
public void onPageFinished(WebView view, String url){ 
    String cookies = CookieManager.getInstance().getCookie(url); 
    Log.d(TAG, "All the cookies in a string:" + cookies); 
} 
+0

mrboyfox, ¿tiene alguna idea al respecto: http://stackoverflow.com/questions/19256509/how-do-i-resolve -t he-authentication-message-that-keeps-popping-up-in-a-webview/19256608? noredirect = 1 # comment28533391_19256608 –

+1

"Simplemente funciona" - gracias. –

18

Fue un bastante tarde, pero podría ayudar a alguien

se puede obtener el valor de la cookie de utilizar este

getCookie("http://www.example.com","CookieName"); 

declara la función como

public String getCookie(String siteName,String CookieName){  
    String CookieValue = null; 

    CookieManager cookieManager = CookieManager.getInstance(); 
    String cookies = cookieManager.getCookie(siteName);  
    String[] temp=cookies.split(";"); 
    for (String ar1 : temp){ 
     if(ar1.contains(CookieName)){ 
      String[] temp1=ar1.split("="); 
      CookieValue = temp1[1]; 
      break; 
     } 
    }    
    return CookieValue; 
} 
+0

¿por qué necesita el [] en las expresiones regulares que se usan para dividir cadenas? –

+0

@RaduSimionescu no me parecen necesarias, pero no van a doler, ya sea – gengkev

+0

@gengkev en ese caso, ¿por qué no escribir algo como "(([;])) {1} {1,1}" ? –

Cuestiones relacionadas