2013-11-12 4 views
21

Я пытаюсь использовать NodeJS, чтобы очистить веб-сайт, для которого требуется логин POST. Затем, как только я войду в систему, я могу получить доступ к отдельной веб-странице на GET.Как сохранить сеанс запроса в NodeJS

Первая проблема прямо сейчас входа в систему. Я пытался использовать request для 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, чтобы получить функциональность мне нужно

ответ

31

Вам нужно сделать печенье банку и использовать ту же банку для всех связанных запросов.

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

Это должно в теории позволяют царапать страницы с GET как вошедшего в систему пользователя, но только один раз вы получите фактический код Логин работать. Основываясь на вашем описании ответа на ваш POST для входа в систему, это может показываться неправильно, поэтому куки-куки не помогут, пока вы не исправите проблемы в своем логин-коде.

+0

Это очень помогло. Я все еще безуспешно вошел в систему, как вы сказали. Я не мог понять, чего не хватает. Я использую POST и добавляю данные формы, но по какой-то причине сервер php, к которому я подключаюсь, никогда не отвечает с «зарегистрированной» страницей. Я буду продолжать работать над этим – Ryan

+2

Да, это зависит от их кода на стороне сервера, который вы в основном используете для обратной инженерии. Вы уверены, что работаете с токенами CSRF, если они ими пользуются? Возможно, они обнюхивают пользовательский агент? У вас есть GET /, чтобы сначала получить файл cookie сеанса, затем убедитесь, что ваш POST для входа в систему включает этот файл cookie? И т. Д. –

+0

Я добавил заголовки для пользовательского агента, но я думаю, что они используют скрипты на стороне клиента для входа в систему. В одном из моих ответов я прочитал «Пожалуйста, включите скрипты для входа». Я застрял сейчас :( – Ryan

10

Request.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

+0

Отличный совет. Решил мой аналогичный случай, когда просто отправить cookie было недостаточно. – Bob

Смежные вопросы