Перенаправление, аутентификация и вход в NodeJS

#node.js #http #url-redirection

#node.js #http #url-перенаправление

Вопрос:

У меня есть требование, при котором я должен ПОЛУЧИТЬ страницу, используя URL-адрес в NodeJS.

Проблема

URL перенаправляет на страницу входа в систему, где мы должны пройти аутентификацию с использованием учетных данных. Как только мы предоставим учетные данные, он перенаправит на фактическую страницу, которую я хотел ПОЛУЧИТЬ. Вот как это работает в браузере.

Есть ли способ получить конечную страницу в качестве выходных данных?

     var https = require('follow-redirects').https;
    var options = {
      host: 'myURL',
      port: 443,
      path: 'myPath'
    };

    https.get(options, function(res) {
     res.setEncoding('utf8');
        res.on('data', function(chunk){
            console.log(chunk);
        });
    });
 

Я получаю страницу входа с 200. Теперь, как мне автоматически аутентифицировать себя с помощью имеющихся у меня учетных данных и перейти на нужную мне страницу?

Комментарии:

1. Вам нужно будет проверить возраст входа в систему и посмотреть, как он отправляет учетные данные. Вероятно, это связано с POST, поэтому ваш скрипт должен выполнить тот же POST, и, в случае успеха, он, вероятно, получит ответ перенаправления. Вам также необходимо будет сохранять файлы cookie, потому что при успешном ответе на вход будет установлен файл cookie, который потребуется при будущих запросах. Существуют модули, которые помогают вам управлять файлами cookie со стороны сервера для имитации клиента браузера.

2. Это было бы проще сделать, используя что-то, что управляет браузером / PhantomJS. Существует несколько пакетов, которые делают это.

Ответ №1:

Наконец-то это требование было выполнено с помощью CasperJS. Спасибо за комментарий @Dave Newton.

    var casper = require('casper').create(); 

    casper.on("remote.message", function (msg) {
        console.log(msg);
    });

    casper.start("https://url.com/path", function () {
        //Enter Credentials
        this.evaluate(function () {
            console.log("filling inputs");

            var usernameInput = document.getElementById("accountname");
            usernameInput.value = "username";

            var passwordInput = document.getElementById("accountpassword");
            passwordInput.value = "password";
        });
        this.click("#continueFieldbutton");
        this.echo("login button was submitted");
    });
    casper.then(function () {
        var js = this.evaluate(function() {
            return document; 
        }); 
        this.echo(js.all[0].outerHTML); 
        this.capture('example.png');
    });
    casper.run();