如何在NodeJS中维护一个请求会话

我正在尝试使用NodeJS来抓取需要通过POST进行login的网站。 然后,一旦我login,我可以通过GET访问一个单独的网页。

现在的第一个问题是login。我试图使用requestPOSTlogin信息,但我得到的响应似乎没有login。

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

在这里,我只是转发我回来的页面,但我回来的页面仍然显示login表单,如果我尝试访问另一个页面,它说我没有login。

我想我需要维护客户端会话和cookie数据,但我找不到任何资源来帮助我理解如何做到这一点。


作为一个后续,我结束了使用zombiejs来获得我需要的function

       

网上收集的解决方案 "如何在NodeJS中维护一个请求会话"

您需要制作一个cookiesjar,并为所有相关的请求使用相同的jar子。

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

理论上这应该允许你以GET方式作为login用户来刮页面,但只有当你得到实际的login代码工作。 根据您对loginPOST的响应描述,这可能实际上并不正确,所以在您首先解决login代码中的问题之前,Cookie jar将无济于事。

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