Android Cookie rejected的解決方案

來源:互聯網
上載者:User

在Android中,當使用Apache的HttpClient進行http串連時,若需要使用Cookie,則一般做法是:

// Create a local instance of cookie storecookieStore = new BasicCookieStore();// Bind custom cookie store to the local contextlocalContext = new BasicHttpContext();localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);// To perform http getHttpGet request = new HttpGet(url);HttpResponse response = new DefaultHttpClient().execute(request, localContext);if (response.getStatusLine().getStatusCode() == 200) {String result = EntityUtils.toString(response.getEntity());// log(result)} 

一般情況下cookie使用沒問題,但是現在有許多大型網站,登陸驗證在是不同的域(domain),這樣就會導致cookie跨域不可寫的問題。搜尋了一下發現還挺難找解決方案的,最後還是在stackoverflow上發現的。Java HtmlUnit - can't login to wordpress

其實apache的文檔已經說明了這個問題了,請看這裡:Chapter 3. HTTP state management 拉到下邊,例子都給出來了。

做法就是自己重寫cookie策略,然後設定http client使用自訂的策略。

主要在於:

CookieSpecFactory csf = new CookieSpecFactory() {    public CookieSpec newInstance(HttpParams params) {        return new BrowserCompatSpec() {               @Override            public void validate(Cookie cookie, CookieOrigin origin)            throws MalformedCookieException {                // Oh, I am easy            }        };    }};DefaultHttpClient httpclient = new DefaultHttpClient();httpclient.getCookieSpecs().register("easy", csf);httpclient.getParams().setParameter(     ClientPNames.COOKIE_POLICY, "easy");

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.