如何在nodejs中修改请求标头

时间:2013-08-10 19:20:06

标签: node.js http

我已经阅读了this帖子并意识到我想做的事情很糟糕,但我有一个客户端发布数据而不添加Content-Length或Transfer-Encoding。我可以用curl模仿curl中的请求:

curl -H "Accept:" -H "Content-Type:" -H "Expect:" -H "Content-Length:" -d 'hello=world' http://localhost:1337/post

并添加Transfer-Encoding标头

curl -H "Accept:" -H "Content-Type:" -H "Expect:" -H "Content-Length:" -H "Transfer-Encoding: chunked" -d 'hello=world' http://localhost:1337/post

产生预期的POST数据。

我正在使用带有以下代码的节点运行服务器:

var http = require('http');
var server = http.createServer(function (req, res) {

  req.on('data', function (chunk) {
    console.log('chunk', chunk.toString());
  });

  req.on('end', function () {
    res.end();
  });
}).listen(1337, '127.0.0.1');

是否有可以拦截请求并添加标头以便我可以访问数据的地方,还是我可以使用其他方法/事件来获取POST数据?

谢谢, Shane Holder

1 个答案:

答案 0 :(得分:0)

我并不是100%清楚你要做什么,但我认为我可以在这里指出一些有用的方向:

  

是否有可以拦截请求并添加标头以便我可以访问数据的地方,还是我可以使用其他方法/事件来获取POST数据?

首先要知道的是,HTTP模块都是源代码。它似乎主要是written in Javascript。因此,如果你不介意一些复制粘贴,你可能会稍微破解一下。

另一个有用的消息是HTTP模块只是一个处理HTTP的套接字的充实实现。如果您真的想要,可以下拉套接字级别并处理所有传入的字节。这应该让你用它做你想做的一切。同样,您可能需要查看一些原始代码。

或者您可以随意修改标题,无论危险如何,并在警告可能出现问题的代码中添加一个大红旗注释。