android - 如何使用 cookieManager 处理 httpUrlConnection 中的 cookie

标签 android cookies httpurlconnection android-cookiemanager

我有一个返回多个 cookie 的服务器请求,如下所示:

enter image description here

这就是我将这些 cookie 存储到 cookieManager 的方式:

HttpURLConnection connection = ... ;
static java.net.CookieManager msCookieManager = new java.net.CookieManager();
msCookieManager.put(COOKIES_URI, connection.getHeaderFields());

这就是我将这些 cookie 添加到下一个连接的方式:

connection.setRequestProperty("Cookie", 
  msCookieManager.getCookieStore().get(COOKIES_URI).toString());

从 cookieManager 获取 cookie 的方法是否正确? 我很确定还有更好的...

最佳答案

好的,正确的做法是这样的:

从响应头中获取 Cookie 并将其加载到 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 获取 Cookie 并将其加载到连接中:

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()));    
}

关于android - 如何使用 cookieManager 处理 httpUrlConnection 中的 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16150089/

相关文章:

Android Studio 上的 Android 虚拟设备错误

javascript - 在 CouchDB 中模拟 session ?

ruby - 如何在 Ruby/Sinatra 中设置和读取原始 cookie

php - 检查是否是第一次查看页面

java - 如何使用java模拟登录

Java Httpurlconnection 多IP地址的DNS解析

android - 安装后 OpenCV Android 库错误

android - 尝试从 json 字符串获取 json 数组或 json 对象时出现 nullpointerexception

android - 登录后如何获取 fragment 的当前用户ID

java - 错误异常 : Already connected In java HttpURLConnection of post method