2016-01-28 9 views
5

W request dokumentacja opowiada o imporcie z pliku cookie z poniższym przykładzie:Export Cookie Jar do JSON z prośbą Node

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

Jednakże, jak zauważono w komentarzu, że spodziewa cookies.json do już istnieje. Pytanie brzmi: jeśli mam plik wyjściowy zawierający pliki cookie, w jaki sposób mogę wyeksportować go do JSON?

Odpowiedz

7

Nie jestem pewien, aby zrozumieć, co masz na myśli przez "jeśli mam słoik z plikami cookie w nim", ale oto w jaki sposób zarządzam trwałymi ciasteczkami z nodejs.

Aby uniknąć błędów z FileCookieStore, dodajemy fragment kodu, aby utworzyć plik json, jeśli nie istnieje. Plik może być pusty, tak długo jak istnieje:

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

Teraz, jeśli przyjrzeć się bliżej kodu FileCookieStore, widać to wywołuje metodę saveToFile każdej chwili nastąpiła zmiana w cookies. Oznacza to, że przekazując obiekt FileCookieStore do modułu request (używając opcji jar jako the request documentation), plik json będzie zawsze odzwierciedlał stan plików cookie.

Powyżej znajduje się pełna przykład:

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

Aby zacząć od nowa, po prostu usuń plik cookipath.

Mam nadzieję, że to pomoże.

+0

Ah, informacja, której mi tu brakowało, to moduł żądania aktualizujący magazyn plików podczas zmiany plików cookie. Myślałem, że muszę ręcznie wyeksportować pliki cookie do pliku. Dzięki za wyjaśnienie i przykład. –