2016-01-28 32 views
5

I request documentazione parla di importazione di biscotti da un file con il seguente esempio:Export Cookie Jar a JSON con Nodo Richiesta

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

Tuttavia, come notato nel commento, si aspetta cookies.json al già esistente. La domanda è, se ho un barattolo con cookie in esso, come posso esportarlo in JSON?

risposta

7

Non sono sicuro di capire cosa intendi con "se ho un barattolo con i cookie esistenti", ma ecco come gestisco i cookie persistenti con nodejs.

Per evitare errori con FileCookieStore, aggiungere una parte di codice per creare il file JSON se non esiste. Il file può essere vuoto, fintanto che esiste:

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

Ora, se si guarda da vicino il codice FileCookieStore, vedrete che chiama il metodo saveToFile ogni volta che c'è un cambiamento nei cookie. Significa che passando un oggetto FileCookieStore al modulo request (usando l'opzione jar come the request documentation), il file JSON rifletterà sempre lo stato dei cookie.

Ecco un esempio completo:

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

di ricominciare, è sufficiente eliminare il file cookipath.

Spero che questo aiuti.

+0

Ah, la parte di informazioni che mi mancava era il modulo di richiesta che aggiorna il filestore quando i cookie cambiano. Pensavo di aver bisogno di esportare manualmente i cookie nel file. Grazie per la spiegazione e l'esempio. –