web-dev-qa-db-fra.com

Suivez la redirection avec la requête node.js

J'essaie d'apprendre node.js, et je travaille sur un utilitaire pour me connecter sur un site, puis extraire des informations. J'ai lu que les redirections devraient "fonctionner automatiquement" dans la documentation, mais je ne peux pas le faire fonctionner.

request({
    url: start_url,
    method: 'POST',
    jar: true,
    form: {
        action: 'login',
        usertype: '2',
        ssusername: '****',
        sspassword: '****',
        button: 'Logga in'
    }
}, function(error, response, body) {
    if (error) {
        console.log(error);
    } else {
        console.log(body, response.statusCode);
        request(response.headers['location'], function(error, response, html) {
            console.log(html);
        });
    }
});

Tout d'abord, je fais un POST, qui donne un respone.statusCode == 302. Le corps est vide. Je m'attendais à ce que le corps contienne la page redirigée.

J'ai ensuite trouvé la "nouvelle" URL, dans response.headers ['location']. Lorsque vous utilisez cela, le corps contient simplement une page "non connecté", au lieu de la page que j'attendais.

Quelqu'un sait comment s'y prendre?

11
kaze

Les redirections sont activées par défaut pour les requêtes [~ # ~] [~ # ~] uniquement. Pour suivre les redirections dans votre [~ # ~] message [~ # ~] , ajoutez ce qui suit à votre configuration:

followAllRedirects: true

Code mis à jour:

request({
    url: start_url,
    method: 'POST',
    followAllRedirects: true,
    jar: true,
    form: {
        action: 'login',
        usertype: '2',
        ssusername: '****',
        sspassword: '****',
        button: 'Logga in'
    }
}, function(error, response, body) {
    if (error) {
        console.log(error);
    } else {
        console.log(body, response.statusCode);
        request(response.headers['location'], function(error, response, html) {
            console.log(html);
        });
    }
});
28
Brandon Smith