0

我已经阅读了这篇文章并意识到我想做的事情很糟糕,但是我有一个客户端正在发布数据而没有添加 Content-Length 或 Transfer-Encoding。我可以模仿 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 数据?

谢谢, 肖恩持有人

4

1 回答 1

0

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

是否有一个地方可以拦截请求并添加标头以便我可以访问数据,或者是否有另一种方法/事件可以用来获取 POST 数据?

所以首先要知道的是 HTTP 模块都可以作为源代码使用。它似乎主要是用 Javascript 编写的。因此,如果您不介意一些复制粘贴,您可能可以稍微破解一下。

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

或者您可以修改标题而不考虑危险,并在代码中放置一个大红旗注释,警告可能存在的问题。

于 2013-08-11T04:24:03.093 回答