我有一堆JSON格式的cookie。它们是从名为EditThisCookie的插件导出Cookie的结果。
我试图解析JSON cookie数组并将它们添加到cookiejar中。我是这样做的:
JSONCookies.forEach(cookie => {
let extensions = [
'session=true',
'sameSite=no_restriction'
];
cookies.push(new ToughCookie.Cookie({
key: cookie.name,
value: cookie.value,
secure: cookie.secure || false,
path: cookie.path,
httpOnly: cookie.httpOnly || false,
extensions: extensions
}));
// Set the uid property of object with users ID
if(cookie.name === 'c_user') {
this.uid = cookie.value;
}
})
我将它们添加到请求的cookiejar中:
cookies.forEach(function(cookie) {
cookieJar.setCookie(cookie, 'https://facebook.com', (err, cookie) => {
if(err) {
reject(new Error(err));
return;
}
})
})
......这很好用。我可以向Facebook提出请求并从我们的业务组中提取数据。
但是,Facebook上的许多请求都使用子域名。例如upload.facebook.com
。这不起作用。显然是因为我错过了Cookie中的domain
。
所以,我创建了坚韧的cookie并添加了domain: '.facebook.com'
。除非我现在发出请求,否则会失败并显示错误:
Error: Cookie not in this host's domain. Cookie:facebook.com Request:null
如何在cookiejar中设置cookie以跨子域工作?有可能吗?
文档不是很好,我也无法找到如何执行此操作。我认为这与传递给setCookie
的网址有关。我试图将其改为不同的变化,但没有用。
答案 0 :(得分:1)
我最近遇到了同样的问题。解决方案是这样做:
cookies.push(new ToughCookie.Cookie({
domain: 'facebook.com'
key: cookie.name,
value: cookie.value,
secure: cookie.secure || false,
path: cookie.path,
httpOnly: cookie.httpOnly || false,
extensions: extensions
}));
.
中的前导.facebook.com
并非必需。这也在tough-cookie github issue上进行了讨论。