节点“请求”模块:获取302重定向中的最后一个响应

时间:2016-04-15 13:17:24

标签: node.js http redirect request

我在Node shell中使用Node request模块通过HTTP POST提交登录表单。如果登录成功,服务器将重定向到“主页”(使用HTTP GET)。

var request = require('request'); request.post('http://localhost:8080/login', { form: { user:'u', password:'p' }}, function(err, resp, body) { console.log(body); }); 的文档说默认情况下会发生任何和所有重定向,而 正在发生 - 我可以看到服务器端的重定向。

但是,在客户端,我需要能够获得服务器端发生的最终重定向的(html)响应主体。 (在我的情况下,主页只有一个重定向,但在一般情况下,它显然也可能超过1个重定向。)

这是我的客户端代码:

curl

问题是:上面的代码在控制台上什么都没打印!

问题:如何打印最终回复?此外,在一系列重定向的情况下,是否有可能在客户端获得至少中间重定向的一些信息 - 例如,至少他们的URL,但理想情况下他们的URL以及他们的HTTP方法类型,请求查询参数,并请求机构?

服务器上没有错,因为:如果我对服务器使用$ curl -L -d 'user=u' -d 'password=p' http://localhost:8080/login <html> ... </html> $ ,我会看到最终主页的html:

{{1}}

1 个答案:

答案 0 :(得分:1)

var request = require('request').defaults({
  followRedirect: true,
  followAllRedirects: true
});

request.post('http://localhost:8080/login', { 
    form: {
        user:'u',
        password:'p'
    }}, 
    function(err, resp, body) { 
        console.log(body); 
});

试试看,区别在于两个选项。默认情况下,followRedirect应为true。另外,看一下实际返回的内容,我遇到了类似的问题,直到我意识到重定向发生在HTML而不是服务器上。