带有 request.jar 的 node.js cookie

spi*_*511 2 authentication cookies jar request node.js

我正在抓取一个需要身份验证的网站。我正在使用 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;
            }
Run Code Online (Sandbox Code Playgroud)

Pet*_*uge 6

您可以创建一个新模块并集中该方法。在这里,我创建了模块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
    };
Run Code Online (Sandbox Code Playgroud)