2012-06-19 12 views
41

Ich habe eine Anwendung, die eine URL in einer Webansicht öffnet, muss der Benutzer dann auf einer Website über die Webansicht anmelden und erhält ein Cookie einmal eingeloggt. Ich habe Probleme, Cookies nach Anmeldung.Android - Extrahieren von Cookies nach dem Anmelden in Webview

Das Problem ist, kann ich dies mit android.webkit.CookieManager erreichen, und alle Cookies in einer einzigen Zeichenfolge ausgeben.

Allerdings möchte ich es mit dem Cookie-Speicher (wie in java.net.CookieStore) erreichen, also muss ich java.net.CookieManager verwenden.

Ich verwende den folgenden Code innerhalb der onPageFinished() eines WebViewClient. Ich weiß, dass das Problem mit dem Öffnen einer neuen Verbindung ist, wo ich den Inhalt von der aktuellen Seite bekommen muss. Ich würde etwas Hilfe schätzen, dank

 @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

Bereits aber der Vollständigkeit halber beantwortet und könnte jemand helfen, überprüfen Sie diese Antwort http://stackoverflow.com/a/15924948/1714030 –

Antwort

56

Sie alle Cookies auf diese Weise von webview als String aktuelle URL extrahieren:

@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, haben Sie eine Ahnung davon: http://StackOverflow.com/Questions/19256509/How-Do-Iresolve -t he-authentication-message-das-hält-pop-up-in-einem-webview/19256608? noredirect = 1 # comment28533391_19256608 –

+1

"Es funktioniert einfach" - danke. –

18

Es ist ein ziemlich spät war, aber es könnte jemand

Sie den Cookie-Wert helfen kann

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

die Funktion erklären mit diesem

bekommen als

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

Warum brauchen Sie das [] in diesen Regexes, die zum Aufteilen von Strings verwendet werden? –

+0

@RaduSimionescu sie scheinen nicht notwendig zu mir, aber sie werden nicht weh tun, entweder – gengkev

+0

@gengkev in diesem Fall, warum nicht eintippen wie "(([;])) {1} {1,1}" ? –

Verwandte Themen