Как получить файлы cookie из модуля запроса в 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' }

Я хочу получить значение " set-cookie" из заголовков ответов. Как его забрать? Есть ли какой-нибудь классный и простой способ? Должен ли я использовать для заявления из filedkey, или. Что мне делать? Я не знаю, что я полностью новичок в Javascript. Спасибо...

Ответ 1

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)
})

Ответ 2

В общем случае с Node, если это общая проблема для решения, кто-то уже пошел на труд писать и публиковать что-то на npm.

Например, request-cookies!

В частности, я думаю, что вы найдете метод toJSON() наиболее полезным, хотя, по общему признанию, документация пакета довольно легкая. Вы можете проверить тесты для некоторых рабочих примеров.

Тем не менее, запрос уже содержит обширную документацию по куки файлам - вы можете найти, что это соответствует вашим потребностям:

Cookies отключены по умолчанию (иначе они будут использоваться в последующих запросах). Чтобы включить файлы cookie, установите jar в true (либо в defaults, либо options).

(Прокрутите вниз до readme, чтобы найти бит о куках).

Ответ 3

Вот как вы можете использовать куки файлы запроса, как сказал @brandonscript.

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

Ответ 4

Если вам все равно, что в 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
  });
});

Ответ 5

Попробуйте сделать это:

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());
});