I am using mitmproxy for intercepting traffic. What I want is to be able to get the entire request and response in a string. I know that you have def response(context, flow)
and that the HTTPFlow object has the request and response objects. What I want is simply something like this in a string
GET http://www.google-analytics.com/collect?v=1& HTTP/1.1
Header 1: value
Header 2: value
request body
and this
HTTP/1.1 301 Moved Permanently
Header 1: value
Header 2: value
response body
Now I've been trying this by joing the different parts and bits of the requests and responses but that is prone to errors. Is there a better way to do this?
Also, does mitm handle Gzip encoded response bodies?
If some one bumps into this; the above answer does not work for mitmproxy 4. Instead one can use this:
You can get the whole request/response object as a string using
flow.request.assemble()
. If you want the request/response without transfer-encoding (gzip), you can use the decoded decorator:Apart from that, you may find https://github.com/mitmproxy/mitmproxy/tree/master/examples very useful.