如何在NodeJS中维护请求会话

时间:2013-11-12 18:09:14

标签: javascript node.js session request

我正在尝试使用NodeJS来抓取需要POST登录的网站。 然后,当我登录后,我可以通过GET访问单独的网页。

现在第一个问题是登录。我尝试使用requestPOST登录信息,但我得到的回复似乎没有登录。

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来获取我需要的功能

3 个答案:

答案 0 :(得分:42)

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

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

理论上,这应该允许您使用GET作为登录用户来抓取页面,但只有在您获得实际登录代码时才会这样做。根据您对登录POST的响应的描述,可能还没有真正正常工作,所以在您首先修复登录代码中的问题之前,cookie jar将无济于事。

答案 1 :(得分:12)

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);
    });
});

Actualy这种方式工作正常。 = d

答案 2 :(得分:0)

请求(如果启用)将管理请求之间的cookie:

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

const request = request.defaults({jar: true})
request('http://www.google.com', function () {
  request('http://images.google.com')
});