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并设置了cookies,但我什么也没得到,它返回null
怎么用CookieStore

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

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

它也null为我返回。

4

2 回答 2

2

使用它来设置cookies。

首先,设置cookieManager:

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

接下来,通过 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());
                }
            }
        }
于 2016-04-01T15:38:22.000 回答
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();
}
于 2016-06-03T02:12:49.170 回答