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

NodeJS - How to get cookies from server response

本文关键字:响应 获取 cookie 服务器 NodeJS      更新时间:2023-09-26

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

步骤定义如下:

  1. 打开登录页面

  2. 输入登录数据

  3. 提交登录表单

  4. 转到指定页面

  5. 从页面获取并解析值

  6. 保存数据到文件

  7. 退出

显然,问题是每次我的脚本必须登录,我想消除它。我想实现某种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,请在对象创建时使用以下行:
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'];
})

这个函数从服务器响应中获取一个特定的cookie值(在Typescript中):

function getResponseCookieValue(res: Response, param: string) {
    const setCookieHeader = res.headers.get('Set-Cookie');
    const parts = setCookieHeader?.match(new RegExp(`(^|, )${param}=([^;]+); `));
    const value = parts ? parts[2] : undefined;
    return value;
}

我个人使用Axios。

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