3 回答
TA贡献1789条经验 获得超8个赞
好的,正确的方法就是这样:
从响应头获取Cookies并将其加载到cookieManager中:
static final String COOKIES_HEADER = "Set-Cookie";
HttpURLConnection connection = ... ;
static java.net.CookieManager msCookieManager = new java.net.CookieManager();
Map<String, List<String>> headerFields = connection.getHeaderFields();
List<String> cookiesHeader = headerFields.get(COOKIES_HEADER);
if (cookiesHeader != null) {
for (String cookie : cookiesHeader) {
msCookieManager.getCookieStore().add(null,HttpCookie.parse(cookie).get(0));
}
}
从cookieManager获取Cookies并将它们加载到连接中:
if (msCookieManager.getCookieStore().getCookies().size() > 0) {
// While joining the Cookies, use ',' or ';' as needed. Most of the servers are using ';'
connection.setRequestProperty("Cookie",
TextUtils.join(";", msCookieManager.getCookieStore().getCookies()));
}
TA贡献1846条经验 获得超7个赞
我已经搜索/尝试了几天以解决我的问题:即使成功登录也无法访问受保护的Web资源
我在iOS上创建了相同的应用程序,并且没有相同的问题,因为NSUrlConnection在后台为我们完成了cookie维护。在Android上,我尝试手动添加Cookie
connection.setRequestProperty("Cookie", "PHPSESSID=str_from_server")
没有任何运气。
最后我读到了
并在应用程序的开头添加了以下两行:
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
现在一切正常。
- 3 回答
- 0 关注
- 1263 浏览
添加回答
举报