如何为HttpUrlConnection设置Cookie

时间:2014-07-22 19:03:25

标签: android httpurlconnection

我已阅读我能找到但仍无法解决问题的所有相关帖子。我的应用程序使用会话cookie与服务器通信,会话cookie存储为org.apache.http.cookie.Cookie对象。我使用HttpClient进行连接,效果很好。

授权:

        List<Cookie> cookies = httpclient.getCookieStore().getCookies();
        if (!cookies.isEmpty()) {
            sessionCookie = cookies.get(0);
            /** multiple cookies usage can be implemented if needed */
        }

每次POST到服务器:

        CookieStore store = client.getCookieStore();
        HttpContext ctx = new BasicHttpContext();
        store.addCookie(Tools.getSessionCookie());
        ctx.setAttribute(ClientContext.COOKIE_STORE, store);

我对Cookie有点新意见但是我注意到Cookie对象看起来(至少在我看来)有点类似于JSONObject,有多个键值。现在我尝试使用LazyList将许多图片加载到GridView。查看ImageLoader课程,我发现它使用的是HttpUrlConnection

    private Bitmap getBitmap(String url) {
    File f = fileCache.getFile(url);
    // from SD cache
    Bitmap b = decodeFile(f);
    if (b != null)
        return b;

    // from web
    try {
        Bitmap bitmap = null;
        URL imageUrl = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) imageUrl
                .openConnection();
        //timeouts modified
        conn.setConnectTimeout(GetSettings.getTimeout(context,
                AppConstants.FLAG_CONN_TIMEOUT));
        conn.setReadTimeout(GetSettings.getTimeout(context,
                AppConstants.FLAG_SO_TIMEOUT));
        conn.setInstanceFollowRedirects(true);
        InputStream is = conn.getInputStream();
        OutputStream os = new FileOutputStream(f);
        Utils.CopyStream(is, os);
        os.close();
        conn.disconnect();
        bitmap = decodeFile(f);
        return bitmap;
    } catch (Throwable ex) {
        ex.printStackTrace();
        if (ex instanceof OutOfMemoryError)
            memoryCache.clear();
        return null;
    }
}

我无法修改它来设置会话cookie,当然我得到401 unauthorized作为服务器响应。基本上我所拥有的是org.apache.http.cookie.Cookie对象。我已经尝试conn.setRequestProperty("Cookie", mySessionCookie.getValue());,但它没有工作

在我的情况下使用会话cookie的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我最终以现在使用ImageLoader的方式修改HttpClient类。但是,我仍然在寻找一种使用HttpUrlConnection设置会话cookie的方法,因此我没有将自己的答案标记为已接受。