I would appreciate any hints on how to implement connection throttling. I have to cap speed available to some particular connections. There is no need to cap any other connections within same cli-srv session, so it would be best if I could define caps on per-connection basis. …
Generally speaking, that could be tricky. Your best bet is looking at mitmproxy.net.tcp’s Reader.
Sorry for bumping but I may found something close to OP asked.
This is a script I used to test browser behavior on particularly slow css / js / etc. It adds a delay before streaming response body (it’s per-request, not connection).
Maybe one can base the condition of delay on
flow.client_conn, and do a real throttle.
# usage: mitmproxy -s THIS_FILE.py # add a delay before starting streaming response body to client from time import sleep from urllib.parse import urlparse def delay_before_streaming_response(flow): url = urlparse(flow.request.url) if url.path.lower().endswith('.css'): return 2 return 0 def responseheaders(flow): def modify(chunks): sleep(delay_before_streaming_response(flow)) # continue to stream original response yield from chunks flow.response.stream = modify