Node.js Post 请求 - 保持会话活动
Node.js Post Request - Keep Session Alive
大家好(顺便说一句,新年快乐 :))!
我正在尝试 Node.js 和 Express.js,但我在处理多个请求时遇到了一些困难。
问题是:我需要从外部网站检索数据。为此,我必须登录并且我有一个可用的 fake/zombie 帐户。我想要做的是首先发送一个带有我的用户名和密码的 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);
很可能服务器正在发回 Set-Cookie
并且它被忽略了(request
模块的默认行为)。要解决此问题,您需要 npm install tough-cookie
然后设置 jar
config option. There are some examples 以显示各种 cookie jar 使用场景。
大家好(顺便说一句,新年快乐 :))! 我正在尝试 Node.js 和 Express.js,但我在处理多个请求时遇到了一些困难。
问题是:我需要从外部网站检索数据。为此,我必须登录并且我有一个可用的 fake/zombie 帐户。我想要做的是首先发送一个带有我的用户名和密码的 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);
很可能服务器正在发回 Set-Cookie
并且它被忽略了(request
模块的默认行为)。要解决此问题,您需要 npm install tough-cookie
然后设置 jar
config option. There are some examples 以显示各种 cookie jar 使用场景。