In reverse proxy mode, mitmproxy accepts standard HTTP requests and forwards them to the specified upstream server. This is in contrast to upstream proxy mode, in which mitmproxy forwards HTTP proxy requests to an upstream proxy server.
command-line | -R schema://hostname[:port] |
---|
Here, schema is one of http, https, http2https or https2http. The latter two extended schema specifications control the use of HTTP and HTTPS on mitmproxy and the upstream server. You can indicate that mitmproxy should use HTTP, and the upstream server uses HTTPS like this:
http2https://hostname:port
And you can indicate that mitmproxy should use HTTPS while the upstream service uses HTTP like this:
https2http://hostname:port
In reverse proxy mode, mitmproxy does not rewrite the host header. While often useful, this may lead to issues with public web servers. For example, consider the following scenario:
$ python mitmdump -d -R http://example.com/ &
$ curl http://localhost:8080/
>> GET https://example.com/
Host: localhost:8080
User-Agent: curl/7.35.0
[...]
<< 404 Not Found 345B
Since the Host header doesn't match example.com, an error is returned.
There are two ways to solve this: