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

Requests setting cookies in cookieJar including subdomains

我有一堆 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

因此,我创建了 tough-cookie 并添加了 domain: '.facebook.com'。除了现在当我发出请求时它失败并出现错误:

Error: Cookie not in this host's domain. Cookie:facebook.com Request:null

如何设置 cookiejar 中的 cookie 以跨子域工作?可能吗?

文档不是很好,我一直无法找到如何执行此操作。我认为这与传递给 setCookie 的 URL 有关。我试图将其更改为不同的变体,但无济于事。

我最近遇到了同样的问题。解决办法是这样做:

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