我正在使用以下mitmproxy
构建Web代理。
https://github.com/mitmproxy/mitmproxy
我想扫描流媒体正文并将其传递给客户端。
mitmproxy
已具有类似功能; https://github.com/mitmproxy/mitmproxy/blob/master/mitmproxy/addons/streambodies.py
我实现了以下代码。
def responseheaders(self, flow):
flow.response.stream = self.response_stream
def response_stream(self, chunks):
for chunk in chunks:
if not my_function(chunk):
raise Exception('catch')
yield chunk
在我上面的代码中,没有办法捕获my_function
返回False
时来自其流程的某些块。
我想从flow.response.stream功能中获取一些块。
答案 0 :(得分:0)
我用以下代码解决了我的问题。
from functools import partial
def responseheaders(self, flow):
flow.response.stream = partial(self.response_stream, flow=flow)
def response_stream(self, chunks, flow):
for chunk in chunks:
yield chunk
否则,在对象中使用__call__
可能是解决方案之一。
class Streamer:
def __init__(self, flow):
self.flow = flow
def __call__(self, chunks):
for chunk in chunks:
yield chunk
def responseheaders(self, flow):
flow.response.stream = Streamer(flow)