我想使用 nodeJS 作为网站抓取工具。我已经实现了一个脚本,可以让我登录系统并解析页面中的一些数据。
步骤定义如下:
打开登录页面
输入登录数据
提交登录表单
转到所需的页面
从页面抓取并解析值
保存数据到文件
退出
显然,问题是每次我的脚本都必须登录,我想消除它。我想实现某种 cookie 管理系统,我可以在其中将 cookie 保存到 .txt 文件,然后在下一个请求期间我可以从文件加载 cookie 并将其发送到请求 header 中。
这种cookie管理系统实现起来并不难,问题是如何在nodejs中访问cookie?我发现它的唯一方法是使用请求响应对象,您可以在其中使用如下内容:
request.get({headers:requestHeaders,uri: user.getLoginUrl(),followRedirect: true,jar:jar,maxRedirects: 10,},function(err, res, body) {
if(err) {
console.log('GET request failed here is error');
console.log(res);
}
//Get cookies from response
var responseCookies = res.headers['set-cookie'];
var requestCookies='';
for(var i=0; i<responseCookies.length; i++){
var oneCookie = responseCookies[i];
oneCookie = oneCookie.split(';');
requestCookies= requestCookies + oneCookie[0]+';';
}
}
);
现在可以将变量requestCookies
的内容保存到.txt文件中,下次执行脚本时加载,这样就可以避免每次执行脚本时都要登录用户的过程.
这是正确的方法,还是有返回 cookie 的方法?
注意:如果您想将request
对象设置为在每个后续请求中自动重新发送收到的cookie,请在对象创建期间使用以下行:
var request = require("request");
request = request.defaults({jar: true});//Send cookies on every subsequent requests
最佳答案
在我的例子中,我使用了像下面这样的“http”库:
http.get(url, function(response) {
variable = response.headers['set-cookie'];
})
关于javascript - NodeJS - 如何从服务器响应中获取 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31514395/