wuchangming / node-mitmproxy

node-mitmproxy is an extensible man-in-the-middle(MITM) proxy server for HTTP/HTTPS base on Node.js.
MIT License
280 stars 62 forks source link

怎么拦截客户端请求并修改参数 #29

Open lang233 opened 2 years ago

lang233 commented 2 years ago

现在想拦截一个客户端发起的api,想手动更改里面的参数。 并把相应代码写在requestInterceptor里. req.write没有这个方法

wuchangming commented 2 years ago

应该是可以直接调整这里 requestOptions 的参数。 https://github.com/wuchangming/node-mitmproxy#requestinterceptor

    requestInterceptor: (requestOptions, clientReq, clientRes, ssl, next) => {
        next();
    }

可以参考下:https://github.com/wuchangming/spy-debugger/blob/master/src/proxy/spyProxy.js#L102

lang233 commented 2 years ago

我是想修改post请求里的form参数,我看参考代码好像只是修改header吧

lang233 commented 2 years ago

查看了您的代码看到如下: https://github.com/wuchangming/node-mitmproxy/blob/master/src/mitmproxy/createRequestHandler.js#L77

req.on('aborted', function () {
      proxyReq.abort();
 });
req.pipe(proxyReq);

客户端的request请求(read stream)经过管道传输给了代理proxyReq(writeable stream),这就导致我没办法通过prxoyReq.write()修改原有的参数(会在原有的参数上加上write里的值),而且在requestInterceptor是没有proxyReq这个对象更是没办法操作。

wuchangming commented 2 years ago

@lang233 ,确实。 抱歉,这个项目写完后,由于本人没别的需求场景就没太维护了。”年久失修“的项目,欢迎PR或者仅供参考吧,😂。同时,还是感谢反馈问题。

LordJD commented 5 months ago

@lang233 为什么要重写,拿到header和data,直接重发不就好了吗?