如何使用CookieStore在HttpUrlConnection中获取cookie?

siq*_*que 5 cookies android httpurlconnection cookiestore

在我的Application班上,我做了以下几点:

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);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我有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(...) { ... }
Run Code Online (Sandbox Code Playgroud)

Cookiee通过使用cookieStore并设置cookie,但我什么都没得到,它返回null.
怎么用CookieStore

一些例子和答案给出了这个:

List<Cookie> cookies =  app.client.getCookieStore().getCookies();
Run Code Online (Sandbox Code Playgroud)

它也回归null我.

Jav*_*nes 2

用它来设置cookie。

首先,设置cookieManager:

    cookieManager = new java.net.CookieManager();
    CookieHandler.setDefault(cookieManager);
    cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
Run Code Online (Sandbox Code Playgroud)

接下来,通过setRequestProperty()将cookie设置到HttpUrlConnection

        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());
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)