在node-mitm中从请求中获取正文内容

时间:2017-11-24 17:25:48

标签: node.js httprequest mitmproxy node-mitm

我有以下node-mitm代码。

 mitm = Mitm();
 mitm.on("request", function(req, res) {
   const body = req.body; //body is null
 })

我觉得这与读取节点的IncomingMessage事件有关,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

Mitm.js的request处理程序就像您在Node的用户那样。也就是说,它不会对req.body执行任何特殊操作,并将其保留为ReadableStream

您可以使用经典on("data")模式获取其内容:

mitm.on("request", function(req, res) {
   req.on("data", function(data) { data == "Hello" })
})

如果你想假冒更大的服务,我有时会使用Express创建路线,然后将Express的路由处理程序传递给Mitm:

var Router = require("express").Router
var router = Router().use(require("body-parser").text())

router.get("/", function(req, res) { req.end() })
mitm.on("request", route.bind(null, router))

function route(router, req, res) {
    router(req, res, function(err) {
        if (err == null) return
        res.writeHead(502)
        throw err
    })
}

最后一个示例是我在Rahvaalgatus开源存储库中公开显示的模式摘要:https://github.com/rahvaalgatus/rahvaalgatus

具体来说,请查看https://github.com/rahvaalgatus/rahvaalgatus/blob/6dc91b026d75879cdc552bd2e63f220235b786c0/test/controllers/home_controller_test.js的控制器测试,并查看https://github.com/rahvaalgatus/rahvaalgatus/blob/6dc91b026d75879cdc552bd2e63f220235b786c0/test/mitm.js处的this.router定义。