NodeJS - 如何从服务器响应中获取cookie

时间:2015-07-20 10:39:43

标签: javascript node.js cookies

我想使用nodeJS作为网站报废的工具。我已经实现了一个脚本,它将我登录到系统并从页面解析一些数据。

步骤定义如下:

  1. 打开登录页面

  2. 输入登录数据

  3. 提交登录表单

  4. 转到所需的页面

  5. 从页面中抓取并解析值

  6. 将数据保存到文件

  7. 退出

  8. 显然,问题是每次我的脚本必须登录,我想要消除它。我想实现某种cookie管理系统,我可以将cookie保存到.txt文件,然后在下一个请求中我可以从文件中加载cookie并将其发送到请求头中。

    这种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,请在对象创建期间使用以下行:< / p>

    var request = require("request");
    request = request.defaults({jar: true});//Send cookies on every subsequent requests
    

2 个答案:

答案 0 :(得分:5)

在我的情况下,我使用了&#39; http:#库,如下所示:

http.get(url, function(response) {
    variable = response.headers['set-cookie'];
})

答案 1 :(得分:0)

我个人使用 Axios。

  axios.request(options).then(function (response) {
  console.log(response.config.headers.Cookie)
}).catch(function (error) {
      console.error(error)
});