簡體   English   中英

Android HttpClient和Cookies

[英]Android HttpClient and Cookies

我在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);          

如果我運行代碼我只收到該網站的登錄頁面,所以它不接受cookie。

提前感謝您的幫助

招呼,蒂莫

我有同樣的問題,我在問題中使用了類似的方法,沒有運氣。 使它適用於我的是為每個復制的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);
 ...

如果你仍然有這個問題,小心給定的cookie,有些可能會格式不正確,請檢查這兩個網站:

http://www.codeproject.com/Articles/3106/On-The-Care-and-Handling-of-Cookies

這個幫助了我: 獲得“Set-Cookie”標題

您似乎正在正確地復制cookie,通常您不需要為HttpClient做任何特殊的事情來發送cookie。 但是,其中一些可能綁定到會話,當您使用HttpClient打開新連接時,您將打開一個新會話。 服務器可能會忽略與當前會話不匹配的cookie。 如果會話ID是在一個cookie,你能夠進入同一個會話這可能會實現,但你真的需要確切地知道服務器的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM