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.
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,
- charger les cookies à partir du cookiejar
- Frapper une URL pour vérifier si l'utilisateur est connecté
Si pas connecté
connectez-vous, Enregistrez les cookies pour cookiejar
- 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
}
});
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.