Comment puis-je utiliser les cookies persistés à partir d'un fichier en utilisant phantomjs

j'ai quelques authentification exigé pour frapper une url particulière. Dans le navigateur, Je n'ai besoin de me connecter qu'une seule fois, comme pour les autres urls liées qui peuvent utiliser l'id de session du cookie n'ont pas besoin d'aller à la page de connexion. De même, puis-je utiliser le cookie généré dans le fichier cookie en utilisant --cookies-file=cookies.txt dans la ligne de commande dans phantomjs pour ouvrir une autre page qui nécessite le même détail de cookie.

s'il vous Plaît suggérer.

24
demandé sur Arun 2013-09-11 15:00:05

2 réponses

Phantom JS et les cookies

--cookies-file=cookies.txt ne stockera que les cookies de non-session dans la boîte à cookies. La connexion et l'authentification sont plus communément basées sur les cookies de session.

Qu'en est-il des cookies de session?

pour sauver ces est assez simple, mais vous devriez considérer qu'ils vont probablement expirer rapidement.

vous devez écrire votre logique de programme pour considérer cela. Par exemple,

  1. charger les cookies à partir du cookiejar
  2. Frapper une URL pour vérifier si l'utilisateur est connecté
  3. Si pas connecté

    connectez-vous, Enregistrez les cookies pour cookiejar

  4. la poursuite de l'instruction

Exemple

var fs = require('fs');
var CookieJar = "cookiejar.json";
var pageResponses = {};
page.onResourceReceived = function(response) {
    pageResponses[response.url] = response.status;
    fs.write(CookieJar, JSON.stringify(phantom.cookies), "w");
};
if(fs.isFile(CookieJar))
    Array.prototype.forEach.call(JSON.parse(fs.read(CookieJar)), function(x){
        phantom.addCookie(x);
    });

page.open(LoginCheckURL, function(status){
 // this assumes that when you are not logged in, the server replies with a 303
 if(pageResponses[LoginCheckURL] == 303)
 {  
    //attempt login
    //assuming a resourceRequested event is fired the cookies will be written to the jar and on your next load of the script they will be found and used
 }


});
27
répondu Jason 2014-06-12 12:10:24

Le fichier créé par l'option --cookies-file=cookies.txt est sérialisé à partir de CookieJar: Il ya des caractères supplémentaires et il est parfois difficile à analyser.

Il peut ressembler à:

[General]
cookies="@Variant(\x7f\x16QList<QNetworkCookie>\x1\v{__cfduid=da7fda1ef6dd8b38450c6ad5632...

j'ai utilisé dans le passé fantôme.les cookies. Ce tableau sera pré-rempli par n'importe quelle donnée de Cookie stockée dans le fichier de cookie spécifié dans les options de démarrage de PhantomJS/ligne de commande, s'il y en a une. Mais vous pouvez aussi ajouter un cookie dynamique en utilisant fantôme.addCookie.

Un exemple de base est

phantom.addCookie({
    'name':     'Valid-Cookie-Name',   /* required property */
    'value':    'Valid-Cookie-Value',  /* required property */
    'domain':   'localhost',           /* required property */
    'path':     '/foo',
    'httponly': true,
    'secure':   false,
    'expires':  (new Date()).getTime() + (1000 * 60 * 60)   /* <-- expires in 1 hour */
});

avec ces méthodes, il n'est pas si difficile d'implémenter votre propre logique de gestion des cookies.

9
répondu Cybermaxs 2014-08-25 18:50:35