monkeyWie / proxyee

HTTP proxy server,support HTTPS&websocket.MITM impl,intercept and tamper HTTPS traffic.
MIT License
1.54k stars 574 forks source link

netty中 response如何和request匹配呢 #46

Closed weirenren closed 5 years ago

weirenren commented 5 years ago

楼主,请教下netty中,异步请求下返回的response如何匹配到那一个request对象呢,这块有什么好的方法吗?我的目的是当response返回后,需要找到对应的request对象,从而生一个包含request和response相关HTTP数据的新的对象。

xidianzxm commented 5 years ago

也有这样的需求。match请求参数和请求体里面的判断放在一起,来改响应

monkeyWie commented 5 years ago

你是问这个项目的还是netty的http模块啊,这个项目的话可以直接通过HttpProxyInterceptPipeline访问到request和response

xidianzxm commented 5 years ago

pipeline再获取request的时候,是HttpRequest,不是FullHttpRequest;只能获取到Http请求头,不能获取到请求体,需要根据请求头和请求体进行match,来改响应

monkeyWie commented 5 years ago

这个目前没有,需要的话可以参考下FullResponseIntercept,或者在Intercept手动存下每一次的HttpContent直到读取到LastHttpContent再去解析

xidianzxm commented 5 years ago

请求我加了aggregator编码,直接解析FullHttpRequest,正在改,后面不懂得再向你咨询,多谢!

xidianzxm commented 5 years ago

HttpProxyServerHandle->handleProxyData(Channel channel, Object msg, boolean isHttp) 确认了msg是FullHttpRequest对象(能够打印出来http请求头和请求体)

HttpProxyClientHandle->channelRead(ChannelHandlerContext ctx, Object msg) {... HttpProxyInterceptPipeline interceptPipeline = ((HttpProxyServerHandle) clientChannel.pipeline().get("serverHandle")).getInterceptPipeline();

FullHttpRequest fullHttpRequest = (FullHttpRequest)interceptPipeline.getHttpRequest(); //上面这行代码,我调试使用,fullHttpRequest的只能拿到请求头,不能拿到请求体 //不知道为什么,能帮助解读下吗? ...

}

xidianzxm commented 5 years ago

作者可否实现 “根据请求头和请求体进行match,来改响应” 的功能?

monkeyWie commented 5 years ago

嗯 我看看能不能提供一个FullRequestIntercept

xidianzxm commented 5 years ago

Thanks!

xidianzxm commented 5 years ago

现在暂时绕了一下,从beforereqest里截取了请求体,然后把请求体中要过滤的内容放到请求头中,然后在match中进行请求头的判断。 期望后期FullRequestIntercept部分的check in,多谢大神!

monkeyWie commented 5 years ago

@xidianzxm 已经提交了https://github.com/monkeyWie/proxyee/commit/3240814eb9211615710ad940e5d1a26bf1eb8735

monkeyWie commented 5 years ago

可以配合FullRequestIntercept+FullResponseIntercept一起使用