Вопрос по android – Как получить куки в HttpUrlConnection с помощью CookieStore?

5

В моем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);
    }
    ...
}

И у меня есть связь в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.
How use CookieStore?

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

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

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

Посмотри на этоlink ... а такжеthis diptia

Ваш Ответ

2   ответа
1

Сначала настройте 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();
}

Похожие вопросы