我已阅读我能找到但仍无法解决问题的所有相关帖子。我的应用程序使用会话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的正确方法是什么?
答案 0 :(得分:0)
我最终以现在使用ImageLoader
的方式修改HttpClient
类。但是,我仍然在寻找一种使用HttpUrlConnection
设置会话cookie的方法,因此我没有将自己的答案标记为已接受。