如何从 node.js 中的请求模块获取 cookie?

How to get cookies from request module in node.js?

function getCookies(){

    request('http://google.com', function (error, response, body) {
        if (!error && response.statusCode == 200) {
            console.log(response.headers);
        }
    })
}

结果

{ date: 'Fri, 11 Dec 2015 07:15:50 GMT',
  expires: '-1',
  'cache-control': 'private, max-age=0',
  'content-type': 'text/html; charset=EUC-KR',
  p3p: 'CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."',
  server: 'gws',
  'x-xss-protection': '1; mode=block',
  'x-frame-options': 'SAMEORIGIN',
  'set-cookie': 
   [ 'PREF=ID=1111111111111111:FF=0:TM=1449818150:LM=1449818150:V=1:S=Q3BB20FA6TkaZymd; expires=Thu, 31-Dec-2015 16:02:17 GMT; path=/; domain=.google.co.kr',
     'NID=74=hnriWxk7N9jHtP5W0qgaxrwD1YuNKOmJg748ucxWilu9jaqHJVovfkYdvMr0tlp-VToID5cdTNDSXNXqr4M8umJ9traab67x2xZKfu3hJbsBRXeVvyiCOcwZ8bkXNcU4; expires=Sat, 11-Jun-2016 07:15:50 GMT; path=/; domain=.google.co.kr; HttpOnly' ],
  'accept-ranges': 'none',
  vary: 'Accept-Encoding',
  connection: 'close' }

我想从响应 headers 中获取“set-cookie”的值。怎么捡?有什么又酷又简单的方法吗?我应该使用来自 filedkey 的语句,还是。我应该怎么办?我不知道我在 Javascript 上完全是新手。谢谢...

function getCookies(callback){

    request('http://google.com', function (error, response, body) {
        if (!error && response.statusCode == 200) {
            return callback(null, response.headers['set-cookie']);
        } else {
            return callback(error);
        }
    })
}

那么您可以拨打:

getCookies(function(err, res){
    if(!err)
       console.log(res)
})

一般来说,对于 Node,如果这是一个需要解决的常见问题,那么已经有人不厌其烦地在 npm 上编写和发布了一些东西。

例如,request-cookies!

特别是,我认为您会发现 toJSON() 方法最有帮助,尽管不可否认该包的文档相当简单。您可以查看 tests 以获取一些工作示例。

也就是说,request 已经有一些关于 cookie 的大量文档 - 您可能会发现这符合您的需要:

Cookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set jar to true (either in defaults or options).

(向下滚动到 readme 的底部以查找有关 cookie 的信息)。

这是@brandonscript 所说的使用请求 cookie 的方法。

var request = require('request');
var Cookie = require('request-cookies').Cookie;

request.get('https://google.com', function(err, response, body) {
  var rawcookies = response.headers['set-cookie'];
  for (var i in rawcookies) {
    var cookie = new Cookie(rawcookies[i]);
    console.log(cookie.key, cookie.value, cookie.expires);
  }
});

来自 google 的示例输出:

NID 98=FfYHDY9-40JzE78qxIpaMugODJ4y4zJIydluKUffvh1lDs70DYk7vrlmw2ca2gD54ywx5WV44Utz9EdLOdFE6IcW2BUGfiVpHZx3kWh69tT_eWlXZTiFkRo7TVr_9WWH 2017-09-08T04:22:41.000Z

如果您不关心 cookie 中的内容而只想使用它,请尝试这种简洁的方法:

var request = require('request');
var j = request.jar();
var request = request.defaults({jar:j});
request('http://www.google.com', function () {
  request('http://images.google.com', function (error, response, body){
     // this request will will have the cookie which first request received
     // do stuff
  });
});

尝试这样做:

npm 安装 tough-cookie

const request = require("request");
const tough = require('tough-cookie');
const  Cookie = tough.Cookie;

request.get(options, (error, response, body) => {
        const cookie = Cookie.parse(response.headers['set-cookie'][0]);
        console.log(cookie.cookieString());
});

当你导入请求模块时,你可能是这样做的

var request = require('request');

加一行如下

var request = require('request');
var request = request.defaults({jar: true})

并且像往常一样使用请求模块。您可以获得设置的cookie响应。