繁体   English   中英

如何在 NodeJS 中维护请求会话

[英]How to maintain a request session in NodeJS

我正在尝试使用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来获得我需要的功能

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

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

从理论上讲,这应该允许您以登录用户的身份使用 GET 抓取页面,但只有在您使实际登录代码正常工作时才可以。 根据您对登录 POST 响应的描述,这可能实际上尚未正常工作,因此在您首先修复登录代码中的问题之前,cookie jar 将无济于事。

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(否则,它们将在后续请求中使用)。 要启用 cookie,请将 jar 设置为 true(在默认值或选项中)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM