我正在抓取一个需要身份验证的网站。我正在使用 node.js 并使用 jar 来请求来存储 cookie。
我的问题: 我有两个路由/login 和/api,当我登录网站时,我将 cookie 存储在登录路由/文件中,然后我如何在/api 中使用相同的 cookie?
login.js:
var request = require('request');
var jar = request.jar();
var payload = querystring.stringify({
username: username,
password: password,
request_token: token,
});
var options = {
..
..
method: 'POST',
body: payload,
jar: jar <---------- Valid cookie
};
request(options, function (error, response, body) {
// Code here
});
--------------------------------
api.js:
var request = require('request');
var jar = request.jar();
var options = {
method: "get",
url: baseUrl,
jar: jar <-------- Not sat anymore
};
request(options, function (error, response, body) {
if (error) {
res.send(error);
return;
}
最佳答案
您可以创建一个新模块并集中该方法。在这里,我创建了模块 jar.js
,它具有允许设置/获取 jar 的导出函数。
您的原始代码现在只需要考虑这种新方式。在每个文件中,我添加了行 var jar = require('./jar');
jar.js:
var request = require('request');
var jar;
module.exports = function getJar() {
if(jar)
return jar;
else {
jar = request.jar();
return jar;
}
}
module.exports = function setJar(jarParam) {
jar = jarParam;
}
--------------------------------
login.js:
var jar = require('./jar');
var request = require('request');
jar.setJar(request.jar());
var payload = querystring.stringify({
username: username,
password: password,
request_token: token,
});
var options = {
..
..
method: 'POST',
body: payload,
jar: jar.getJar() <---------- Valid cookie, from jar module
};
request(options, function (error, response, body) {
// Code here
});
--------------------------------
api.js:
var request = require('request');
var jar = require('./jar');
var options = {
method: "get",
url: baseUrl,
jar: jar.getJar() <---------- Valid cookie, from jar module
};
关于node.js cookie 与 request.jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33506393/