Comment gérer une session de requête dans NodeJS

J'essaie d'utiliser NodeJS pour gratter un site web qui nécessite une connexion par POST. Ensuite, une fois connecté, je peux accéder à une page Web séparée par GET.

Le premier problème en ce moment est de se connecter. J'ai essayé d'utiliser request à POST les informations de connexion, mais la réponse que je reçois ne semble pas être connecté.

exports.getstats = function (req, res) {
    request.post({url : requesturl, form: lform}, function(err, response, body) {
        res.writeHeader(200, {"Content-Type": "text/html"});
        res.write(body);
        res.end();
    });
};

Ici, Je ne fais que transférer la page que je récupère, mais la page que je récupère affiche toujours le formulaire de connexion, et si j'essaie d'accéder à une autre page, il est dit que je ne suis pas connecté dans.

Je pense que je dois maintenir la session côté client et les données de cookie, mais je ne trouve aucune ressource pour m'aider à comprendre comment faire cela.


Comme suivi, j'ai fini par utiliser zombiejs pour obtenir la fonctionnalité dont j'avais besoin

25
demandé sur Bill the Lizard 2013-11-12 22:09:14

2 réponses

Vous devez créer un cookie jar et utiliser le même jar pour toutes les requêtes associées.

 var cookieJar = request.jar();
 request.post({url : requesturl, jar: cookieJar, form: lform}, ...

Cela devrait en théorie vous permettre de gratter des pages avec GET en tant qu'utilisateur connecté, mais seulement une fois que le code de connexion réel fonctionne. Sur la base de votre description de la réponse à votre message de connexion, cela peut ne pas encore fonctionner correctement, de sorte que le cookie jar ne vous aidera pas tant que vous n'aurez pas résolu les problèmes dans votre code de connexion.

36
répondu Peter Lyons 2013-11-12 18:31:16

Le request.jar(); n'a pas fonctionné pour moi. J'utilise donc la réponse headers pour faire une autre requête comme celle-ci:

request.post({
    url: 'https://exampleurl.com/login',
    form: {"login":"xxxx", "password":"xxxx"}
}, function(error, response, body){

    request.get({
        url:"https://exampleurl.com/logged",
        header: response.headers
    },function(error, response, body){
        // The full html of the authenticated page
        console.log(body);
    });
});

En réalité, cette façon fonctionne bien. = D

11
répondu Henrique Rotava 2018-06-28 06:50:08