将 cookie 文件传递给 curl 请求的 Node.js

3

我使用chrome的cookies.txt扩展,在登录谷歌后获取cookies.txt文件。

cookie文件格式为netscape cookie。现在我想要通过nodejs将此cookie文件传递给http请求。

我使用的命令行:

curl -L -b cookie.txt https://myaccount.google.com/

但我找不到任何关于如何将cookie文件传递给nodejs的curl函数的文档。

如何将上述命令行转换为nodejs代码?

更新:cookie.txt格式如下:

# HTTP Cookie File for mozilla.org by Genuinous @genuinous.
# To download cookies for this tab click here, or download all cookies.
# Usage Examples:
#   1) wget -x --load-cookies cookies.txt "https://developer.mozilla.org/vi/docs/Web/JavaScript/Reference/Functions/Arrow_functions"
#   2) curl --cookie cookies.txt "https://developer.mozilla.org/vi/docs/Web/JavaScript/Reference/Functions/Arrow_functions"
#   3) aria2c --load-cookies cookies.txt "https://developer.mozilla.org/vi/docs/Web/JavaScript/Reference/Functions/Arrow_functions"
#
.mozilla.org    TRUE    /   FALSE   1643553591  _ga GA1.2.176633766.1564724252
.developer.mozilla.org  TRUE    /   TRUE    1583073592  dwf_sg_task_completion  False
.mozilla.org    TRUE    /   FALSE   1580567991  _gid    GA1.2.1169610322.1580463999
developer.mozilla.org   FALSE   /   FALSE   1580483392  lux_uid 158048125271715522
.mozilla.org    TRUE    /   FALSE   1580481652  _gat    1

Nodejs 代码:

var http = require('http');

var options = {
    hostname: 'www.myaccount.google.com',
    path: '/',
    headers: {
        'User-Agent': 'whatever',
        'Referer': 'https://google.com/',
        'Cookie': ????
    }
};

http.get(options, callback);

在node.js中,您需要使用请求设置cookie header。如果您展示用于发出请求的nodejs代码并显示您的cookie文件,则人们可以更具体地帮助您。 - jfriend00
我更新了cookie.txt的格式。 - justcntt
Cookie头部的格式如下:Cookie: name=value; name2=value2; name3=value3,因此在您的示例文件中第一个cookie将是Cookie: _ga=GA1.2.176633766.1564724252; - jfriend00
Cookie 头字段的限制是否存在,可能比 cookie-jar 文件中允许的大小要小得多? - khosrow
2个回答

3

有一个名为npm cookiefile的包,它可以读取 netscape 格式的 cookiefile,并生成适当的头部。

它将从 cookiefile 发送所有 Cookie 的过期、路径和范围数据。

类似这样的内容(未经调试):

var http = require('http');
const cookiefile = require('cookiefile')

const cookiemap = new cookiefile.CookieMap('path/to/cookie.txt')
const cookies = cookiemap.toRequestHeader().replace ('Cookie: ','')

var options = {
    hostname: 'www.myaccount.google.com',
    path: '/',
    headers: {
        'User-Agent': 'whatever',
        'Referer': 'https://google.com/',
        'Cookies': cookies
    }
};

http.get(options, callback);

在使用您的代码后,我遇到了“Cookie文件不存在”的错误。 - justcntt
你在调用CookieMap构造函数时是否提供了cookie文件的实际路径?请使用实际路径替换path/to/cookie.txt - O. Jones
你正在删除 Cookie: 并添加 Cookies — 只是想确认这是否是有意的?我之前从未见过 Cookies(复数形式)。 - khosrow

1
正如你已经知道的那样,你只需要根据目标主机名对应的名称和值设置Cookie头。以下是来自你的cookie文件中developer.mozilla.org域的示例:
var http = require('http');

var options = {
    hostname: 'developer.mozilla.org',
    path: '/',
    headers: {
        'User-Agent': 'whatever',
        'Referer': 'https://google.com/',
        'Cookie': 'dwf_sg_task_completion=False; lux_uid=158048125271715522;'
    }
};

http.get(options, callback);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接