2015-01-02 58 views
-1

嗨,大家好(新年快樂btw :))! 我嘗試Node.js和Express.js,並且,我在處理幾個請求時遇到了一些困難。Node.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

最有可能的服務器發回一個Set-Cookie而且越來越忽略(爲request模塊的默認行爲)。要解決該問題,您需要npm install tough-cookie,然後設置jarconfig option。有一些examples顯示各種cookie jar使用情況。

+0

非常感謝。我正在查看我的http頭文件的keep-alive屬性,但這並不重要。 'require('request')。default({jar:true})'就足夠了(使用韌體cookie)來保持會話從一個請求到另一個。 – KtorZ