axios-cookiejar-support仅保存1个Cookie,如何保存全部Cookie?
问题原因
问题出在tough-cookie的默认配置上:它默认开启了rejectPublicSuffixes(值为true),这个配置会拒绝存储公共后缀域名绑定的Cookie。baidu.com属于公共后缀列表中的域名,所以响应头里带domain=.baidu.com的3个Cookie(BIDUPSID、PSTM、BAIDUID)被判定为无效,未存入CookieJar;只有不带domain属性的BD_NOT_HTTPS(默认绑定请求域名的host-only Cookie)被保存。
解决方法
创建CookieJar实例时,显式关闭rejectPublicSuffixes选项,允许tough-cookie存储公共后缀域名下的Cookie:
'use strict'; const { default: axios } = require('axios'); const { CookieJar } = require('tough-cookie'); const { wrapper } = require('axios-cookiejar-support'); // 关闭公共后缀域名的Cookie拦截 const jar = new CookieJar(null, { rejectPublicSuffixes: false }); const client = wrapper(axios.create({ jar, // 开启withCredentials确保Cookie处理逻辑正常触发 withCredentials: true })); client.get('https://www.baidu.com').then((res) => { console.log(res.headers, jar); });
验证方式
修改后可以通过tough-cookie的getCookies方法确认所有Cookie已保存:
client.get('https://www.baidu.com').then(async (res) => { const cookies = await jar.getCookies('https://www.baidu.com'); console.log('全部已保存Cookie:', cookies); });
内容的提问来源于stack exchange,提问作者Mr. Python
相关产品推荐
相关产品推荐

