如何将包含多Cookie的动态字符串解析为tough-cookie容器?
实现方案
tough-cookie 本身已经内置了针对合并多Cookie字符串的拆分能力,可以完美避开属性值(比如Expires)中自带的逗号,同时兼容所有动态属性场景,不需要手动判断属性是否存在。
完整实现代码
const { Cookie, CookieJar } = require('tough-cookie'); // 从第三方库获取的原始Cookie字符串 const rawCookie = "b=a; Path=/; Expires=Mon, 01 Nov 2021 21:46:17 GMT, c=d; expires=Tue, 01 Nov 2022 07:57:25 GMT; HttpOnly; path=/; Domain=.d.es"; // 1. 拆分多Cookie字符串,自动处理Expires属性中自带的逗号 const singleCookieList = Cookie.splitCookiesString(rawCookie); // 2. 逐个解析为tough-cookie的Cookie实例 const cookieInstances = singleCookieList.map(cookieStr => Cookie.parse(cookieStr)); // 3. 存入CookieJar容器 const cookieJar = new CookieJar(); for (const cookie of cookieInstances) { // 第二个参数替换为Cookie所属站点的实际url即可,无Domain属性的Cookie会自动根据url补全默认值 cookieJar.setCookieSync(cookie, 'https://d.es'); }
说明
Cookie.splitCookiesString是tough-cookie官方提供的工具方法,专门用于处理多个拼接的Set-Cookie头内容,自动处理所有格式兼容问题,不需要手动拆分判断属性。- 对于没有携带Expires、Domain等可选属性的Cookie,
Cookie.parse会自动按照HTTP Cookie规范处理,缺失的属性会在存入CookieJar时根据传入的站点url自动补全默认值,无需手动处理。
内容的提问来源于stack exchange,提问作者Manolo Martinez
相关产品推荐
相关产品推荐

