2015-11-03 4 views
0

Im соскабливание сайта, для которого требуется аутентификация. Я использую node.js и запрос с банкой для хранения cookie.node.js cookie с запросом.jar

Моя проблема: У меня есть два маршрута/логин и/api, когда я вхожу на веб-сайт, я хранил файл cookie в пути/файле входа, как я могу использовать тот же файл cookie в/api?

 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; 
      } 

ответ

2

Вы можете создать новый модуль и централизовать подход. Здесь я создал модуль jar.js, который экспортировал функции, которые позволяют устанавливать/получать банку.

Вы должны указать, что оригинальный код просто необходим для этого нового способа. В каждом файле я добавил строку 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 
    }; 
+0

Это сработало, спасибо! – spitfire511

Смежные вопросы