J'ai une authentification requise pour atteindre une URL particulière. Dans le navigateur, je n'ai besoin de me connecter qu'une seule fois, car pour les autres URL associées qui peuvent utiliser l'identifiant de session du cookie, il n'est pas nécessaire de se rendre sur la page de connexion. De même, puis-je utiliser le cookie généré dans le fichier cookie à l'aide de --cookies-file=cookies.txt
dans la ligne de commande de phantomjs pour ouvrir une autre page qui nécessite le même détail de cookie.
Veuillez suggérer.
--cookies-file=cookies.txt
ne stockera que les cookies hors session dans le bac à cookies. La connexion et l'authentification sont généralement basées sur des cookies de session.
Pour les enregistrer, c'est assez simple, mais vous devez considérer qu'ils expireront probablement rapidement.
Vous devez écrire la logique de votre programme pour en tenir compte. Par exemple
Si non connecté
Connectez-vous, enregistrez les cookies dans cookiejar
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 y a des caractères supplémentaires et il est parfois difficile d'analyser.
Cela peut ressembler à:
[General]
cookies="@Variant(\0\0\0\x7f\0\0\0\x16QList<QNetworkCookie>\0\0\0\0\x1\0\0\0\v\0\0\0{__cfduid=da7fda1ef6dd8b38450c6ad5632...
J'ai utilisé dans le passé phantom.cookies . Ce tableau sera pré-rempli par toutes les données de cookie existantes stockées dans le fichier de cookie spécifié dans les options de configuration/ligne de commande de démarrage de PhantomJS, le cas échéant. Mais vous pouvez également ajouter un cookie dynamique en utilisant phantom.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.