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

Jun*_*tae 17 cookies node.js node-request

function getCookies(){

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

结果

{ 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' }
Run Code Online (Sandbox Code Playgroud)

我想从响应标头中获取' set-cookie '的值.怎么拿起来?有什么很酷很简单的方法吗?我应该使用来自filedkey的声明,还是.我该怎么办?我不知道我是Javascript的新手.谢谢...

Bla*_*mba 14

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);
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

然后你可以打电话:

getCookies(function(err, res){
    if(!err)
       console.log(res)
})
Run Code Online (Sandbox Code Playgroud)

  • 哇塞!真的么?与在服务器端表达相比,这是一种不太友好的获取 cookie 的方式,我只能说“req.cookies.cookieName” (2认同)

bra*_*ipt 8

一般来说,使用Node,如果这是一个常见的问题需要解决,有人已经在npm上编写和发布了一些东西.

例如,请求cookie!

特别是,我认为你会发现这个toJSON()方法最有帮助,但不可否认的是,软件包的文档很轻松.您可以查看测试中的一些工作示例.

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

默认情况下禁用Cookie(否则,它们将在后续请求中使用).要启用Cookie,请设置jartrue(在defaults或中options).

(向下滚动到自述文件的底部以查找有关cookie的位数).


tha*_*hpk 7

以下是@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);
  }
});
Run Code Online (Sandbox Code Playgroud)

来自goolge的样本输出:

NID 98=FfYHDY9-40JzE78qxIpaMugODJ4y4zJIydluKUffvh1lDs70DYk7vrlmw2ca2gD54ywx5WV44Utz9EdLOdFE6IcW2BUGfiVpHZx3kWh69tT_eWlXZTiFkRo7TVr_9WWH 2017-09-08T04:22:41.000Z
Run Code Online (Sandbox Code Playgroud)