Android HttpClient和Cookies

tim*_*001 7 java cookies android httpclient

我在Android中遇到HttpClient问题:通过使用以下代码,我想通过webview登录来使用之前已设置的cookie.所以登录数据应该在那里,确实存在,我测试了它.但是当我在httppost或httpget中使用cookie时,它不使用登录数据.但这些cookie实际上应该足以接收需要登录的页面,不应该这样吗?我不确定是否需要以特殊方式将cookie发送到服务器,或者是否足以将其加载到httpcontext中.这是代码:

DefaultHttpClient httpclient = new DefaultHttpClient();
CookieStore lCS = new BasicCookieStore();


if (CookieManager.getInstance().getCookie(pUrl) != null) {  
    String cookieString = CookieManager.getInstance().getCookie(pUrl);

    String[] urlCookieArray = cookieString.split(";");
    for (int i = 0; i < urlCookieArray.length; i++) {           
        System.out.println(urlCookieArray[i]);          
        String[] singleCookie = urlCookieArray[i].split("=");
        Cookie urlCookie = new BasicClientCookie(singleCookie[0], singleCookie[1]);
        lCS.addCookie(urlCookie);           
    }

}

HttpContext localContext = new BasicHttpContext();
httpclient.setCookieStore(lCS);
localContext.setAttribute(ClientContext.COOKIE_STORE, lCS);

HttpPost httppost = new HttpPost(pUrl);        


    // get the url connection       
try {

    StringBuilder sb = new StringBuilder();     
    HttpResponse response = httpclient.execute(httppost, localContext);     
    InputStream is = response.getEntity().getContent();         
    InputStreamReader isr = new InputStreamReader(is);          
Run Code Online (Sandbox Code Playgroud)

如果我运行代码我只收到该网站的登录页面,所以它不接受cookie.

提前感谢您的帮助

招呼,蒂莫

Dan*_*man 8

我有同样的问题,我在问题中使用了类似的方法,没有运气.使它适用于我的是为每个复制的cookie添加域.(BasicClientCookie cookie.setDomain(String))

我的util函数:

public static BasicCookieStore getCookieStore(String cookies, String domain) {
    String[] cookieValues = cookies.split(";");
    BasicCookieStore cs = new BasicCookieStore();

    BasicClientCookie cookie;
    for (int i = 0; i < cookieValues.length; i++) {
        String[] split = cookieValues[i].split("=");
        if (split.length == 2)
            cookie = new BasicClientCookie(split[0], split[1]);
        else
            cookie = new BasicClientCookie(split[0], null);

        cookie.setDomain(domain);
        cs.addCookie(cookie);
    }
    return cs;
}

 String cookies = CookieManager.getInstance().getCookie(url);
 BasicCookieStore lCS = getCookieStore(cookies, MyApp.sDomain);

 HttpContext localContext = new BasicHttpContext();
 DefaultHttpClient httpclient = new DefaultHttpClient();
 httpclient.setCookieStore(lCS);
 localContext.setAttribute(ClientContext.COOKIE_STORE, lCS);
 ...
Run Code Online (Sandbox Code Playgroud)