Node.js发布请求 - 保持会话活动

时间:2015-01-02 12:15:16

标签: javascript node.js post request keep-alive

嗨伙计们(新年快乐btw :))! 我正在尝试Node.js和Express.js,并且我在处理几个请求时遇到了一些困难。

问题在于:我需要从外部网站检索数据。为此,我必须登录并且我有一个假/僵尸帐户。我想要做的是先发送一个带有我的用户名和密码的POST请求,然后发送GET请求来访问特定内容。问题是,即使POST请求成功执行,当我正在执行GET请求时,我也不再登录。 我在Ruby中使用Gem Mechanize做了同样的事情,但它应该做一些使整个过程工作的隐含的东西。

要发出请求,我正在使用请求模块(https://github.com/request/request)。而且,这是代码:

var zombie = require('request').defaults({
  headers: { connection: "keep-alive" },
  pool: {maxSockets: 1},
});

var connect = function(req, res, next){
  zombie.post({
    url: "target.com",
    form: {
      user: "zombie",
      pass: "password"}
  }, function(err, response, body){
    req.connected = true;
    next();
  });
}

var information = function(req, res, next){
  if(req.connected){
    zombie.get({
      url:  "target.com",
      qs: {
        page: "targetPage",
        search: req.params.search}
    }, function(err, response, body){
      res.send(body);
    })
  }
}

而且,从控制器,我正在尝试连接,然后访问信息。

var router = require('express').Router();
var zombie = require('./../middleware/Zombie');
router.get('/search/:search', zombie.connect, zombie.information);

1 个答案:

答案 0 :(得分:2)

服务器很可能正在发回Set-Cookie并且它被忽略(request模块的默认行为)。要解决此问题,您需要npm install tough-cookie,然后设置jar config option。有一些examples显示了各种cookie jar使用场景。