[英]How to maintain a request session in NodeJS
我正在尝试使用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();
});
};
在这里,我只是转发我返回的页面,但我返回的页面仍然显示登录表单,如果我尝试访问另一个页面,它会说我没有登录。
我想我需要维护客户端会话和 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.