请求在cookieJar中设置cookie,包括子域

时间:2016-08-25 12:14:20

标签: node.js cookies node-request

我有一堆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的网址有关。我试图将其改为不同的变化,但没有用。

1 个答案:

答案 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上进行了讨论。