Как сохранить сеанс запроса в NodeJS
Я пытаюсь использовать NodeJS
для очистки веб-сайта, для которого требуется вход в систему POST
.
Затем, как только я войду в систему, я могу получить доступ к отдельной веб-странице GET
.
Первая проблема прямо сейчас - это вход в систему. Я пытался использовать request
to POST
данные для входа, но ответ, который я получаю, не входит в систему.
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();
});
};
Здесь я просто пересылаю страницу, которую я возвращаю, но страница, на которой я возвращаюсь, показывает форму входа в систему, и если я попытаюсь получить доступ к другой странице, то она говорит, что я не вошел в систему.
Мне кажется, мне нужно поддерживать сессию на стороне клиента и данные cookie, но я не могу найти никаких ресурсов, чтобы помочь мне понять, как это сделать.
В качестве продолжения я закончил использование zombiejs, чтобы получить нужные мне функции
Ответы
Ответ 1
Вам нужно сделать кувшин cookie и использовать ту же самую банку для всех связанных запросов.
var cookieJar = request.jar();
request.post({url : requesturl, jar: cookieJar, form: lform}, ...
Это теоретически позволит вам очистить страницы с GET как зарегистрированным пользователем, но только после того, как вы получите действующий код входа. Основываясь на вашем описании ответа на ваш POST для входа в систему, это может показываться неправильно, поэтому кук файл cookie не поможет, пока вы не исправите проблемы в своем коде входа.
Ответ 2
Запрос .jar(); не работал у меня. Поэтому я использую ответ заголовков, чтобы сделать следующий запрос следующим образом:
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);
});
});
Фактически этот способ работает нормально. = D