Javascript 如何在NodeJS中维护请求会话

Javascript 如何在NodeJS中维护请求会话,javascript,node.js,session,request,Javascript,Node.js,Session,Request,我正在尝试使用NodeJS删除一个需要通过POST登录的网站。 登录后,我可以通过GET访问单独的网页 现在的第一个问题是登录。我尝试使用request来POST登录信息,但得到的响应似乎没有登录 exports.getstats = function (req, res) { request.post({url : requesturl, form: lform}, function(err, response, body) { res.writeHeader(200,

我正在尝试使用
NodeJS
删除一个需要通过
POST
登录的网站。 登录后,我可以通过
GET
访问单独的网页

现在的第一个问题是登录。我尝试使用
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();
    });
};
这里我只是转发我返回的页面,但是我返回的页面仍然显示登录表单,如果我尝试访问另一个页面,它会显示我没有登录

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数据,但我找不到任何资源来帮助我理解如何做到这一点



作为后续工作,我最终使用它来获得所需的功能

您需要制作一个cookie jar,并对所有相关请求使用相同的jar

 var cookieJar = request.jar();
 request.post({url : requesturl, jar: cookieJar, form: lform}, ...
从理论上讲,这应该允许您以登录用户的身份使用GET刮取页面,但只有在实际的登录代码正常工作之后。根据您对登录帖子响应的描述,这可能还不能正常工作,因此cookie jar在您首先解决登录代码中的问题之前不会有帮助。

the
request.jar()对我不起作用。因此,我使用headers响应发出另一个请求,如下所示:

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

如果启用请求,则请求管理请求之间的Cookie:

默认情况下禁用Cookie(否则,将在 后续请求)。要启用cookies,请将jar设置为true(在 默认值或选项)


这帮了大忙。我仍然没有像你说的那样成功登录。我看不出少了什么。我正在使用POST并添加表单数据,但由于某些原因,我连接到的php服务器从未使用“登录”页面回复。我将继续研究它是的,这取决于他们的服务器端代码,你基本上是逆向工程。如果他们使用CSRF代币,您确定您正在处理这些代币吗?他们可能会嗅探用户代理吗?您是否必须先获取/才能获取会话cookie,然后确保登录帖子中包含该cookie?我为用户代理添加了标题,但我认为他们使用客户端脚本登录。在我的一个回复中,我读到“请启用脚本登录”。我现在被卡住了:(使用chrome开发工具直接检查http请求,并尝试在代码中进行模拟。这是我到目前为止一直在做的事情,而且非常有用,但我认为登录系统中存在一些javascript骗局。我将重新思考我的方法。很棒的提示。解决了我的类似情况,即发送cookie不符合enough、 你能用zombiejs发布你的例子吗?我也遇到了同样的问题,node.js使用request并没有保留会话。