2012-05-30 2 views
5

В моем Application классе, я следующее:Как получить файлы cookie в HttpUrlConnection с помощью CookieStore?

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); 
    } 
    ... 
} 

И у меня есть соединение в Runnable части:

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 с помощью cookieStore, а также набор печенья, но я ничего не получаю , он возвращает null.
Как использовать CookieStore?

Некоторые примеры и ответ дать это:

List<Cookie> cookies = app.client.getCookieStore().getCookies(); 

Она также возвращает null для меня.

+0

Взгляните на это [ссылка] (http://czheng035.wordpress.com/2012/06/18/cookie-management-in-android-webview-development/) ... и [это] (http : //stackoverflow.com/questions/6156514/cookiesyncmanagercreateinstance-needs-to-be-called-before-cookiesyncmanager) – diptia

ответ

1

Используйте это, чтобы установить cookies.

Сначала установите upcookieManager:

cookieManager = new java.net.CookieManager(); 
    CookieHandler.setDefault(cookieManager); 
    cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL); 

Далее, установите печенье в HttpURLConnection по 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()); 
       } 
      } 
     } 
1

набор печенья:

conn.setRequestProperty("Cookie", "cookieName=cookieValue; domain=www.test.com"); 

получить печенье:

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(); 
} 
Смежные вопросы