Экспорт файла cookie в JSON с запросом узла

В документации request говорится об импорте файлов cookie из файла в следующем примере:

var FileCookieStore = require('tough-cookie-filestore');
// NOTE - currently the 'cookies.json' file must already exist!
var j = request.jar(new FileCookieStore('cookies.json'));
request = request.defaults({ jar : j })
request('http://www.google.com', function() {
  request('http://images.google.com')
})

Однако, как отмечено в комментарии, ожидается, что cookies.json уже существует. Вопрос в том, если у меня есть существующая банка с файлами cookie, как я могу экспортировать ее в JSON?


person Joshua Gilman    schedule 28.01.2016    source источник


Ответы (1)


Я не уверен, что понимаю, что вы подразумеваете под «если у меня есть существующая банка с файлами cookie», но вот как я управляю постоянными файлами cookie с помощью nodejs.

Чтобы избежать ошибок с FileCookieStore, я добавляю кусок кода для создания файла json, если он не существует. Файл может быть пустым, если он существует:

if(!fs.existsSync(cookiepath)){
    fs.closeSync(fs.openSync(cookiepath, 'w'));
}

Теперь, если вы внимательно посмотрите на код FileCookieStore, вы увидите, что он вызывает метод saveToFile каждый раз при изменении файлов cookie. Это означает, что при передаче объекта FileCookieStore в модуль request (используя параметр jar, как поясняет документация запроса ), файл json всегда будет отражать состояние файлов cookie.

Вот полный пример:

var FileCookieStore = require('tough-cookie-filestore');
var request = require('request');
var fs = require("fs");

var cookiepath = "cookies.json";

// create the json file if it does not exist
if(!fs.existsSync(cookiepath)){
    fs.closeSync(fs.openSync(cookiepath, 'w'));
}

// use the FileCookieStore with the request package
var jar = request.jar(new FileCookieStore(cookiepath));
request = request.defaults({ jar : jar });

// do whatever you want
request('http://www.google.com', function() {
    request('http://images.google.com')
});

// the cookies in 'jar' corresponds to the cookies in cookies.json
console.log(jar);

Чтобы начать заново, просто удалите файл cookipath.

person Derlin    schedule 30.01.2016
comment
Ах, часть информации, которую мне здесь не хватало, это модуль запроса, обновляющий хранилище файлов при изменении файлов cookie. Я думал, что мне нужно вручную экспортировать файлы cookie в файл. Спасибо за объяснение и пример. - person Joshua Gilman; 31.01.2016