我已经阅读了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
答案 0 :(得分:0)
我并不是100%清楚你要做什么,但我认为我可以在这里指出一些有用的方向:
是否有可以拦截请求并添加标头以便我可以访问数据的地方,还是我可以使用其他方法/事件来获取POST数据?
首先要知道的是,HTTP模块都是源代码。它似乎主要是written in Javascript。因此,如果你不介意一些复制粘贴,你可能会稍微破解一下。
另一个有用的消息是HTTP模块只是一个处理HTTP的套接字的充实实现。如果您真的想要,可以下拉套接字级别并处理所有传入的字节。这应该让你用它做你想做的一切。同样,您可能需要查看一些原始代码。
或者您可以随意修改标题,无论危险如何,并在警告可能出现问题的代码中添加一个大红旗注释。