如何使用 mitmproxy 将 HTTPS 流量重定向到本地 HTTP 服务器?

How to redirect HTTPS traffic to local HTTP server using mitmproxy?

我正在尝试设置 mitmproxy,以便我可以从我的浏览器向 https://{my-domain} 发出请求,并让它 return 来自我的本地服务器 运行 的响应 http://localhost:3000 而不是,但我无法获得到达本地服务器的 https 请求。我看到来自 mitmproxy 的调试语句。另外,我可以让它为 http 流量工作,但不能为 https 工作。

我读了 mitmproxy addon docs and api docs 我已经安装了证书,我可以通过代理监控https。

我正在使用 Mitmproxy:4.0.4 和 Python:3.7.4

这是我的插件 (local-redirect.py) 以及我如何 运行 mitmproxy:

from mitmproxy import ctx
import mitmproxy.http

class LocalRedirect:

  def __init__(self):
    print('Loaded redirect addon')

  def request(self, flow: mitmproxy.http.HTTPFlow):
    if 'my-actual-domain-here' in flow.request.pretty_host:
      ctx.log.info("pretty host is: %s" % flow.request.pretty_host)
      flow.request.host = "localhost"
      flow.request.port = 3000
      flow.request.scheme = 'http'

addons = [
  LocalRedirect()
]
$ mitmdump -s local-redirect.py | grep pretty

当我从我的服务器访问 url 表单时,我看到了日志记录语句,但是我的浏览器在请求时挂起并且没有向我的本地服务器发出请求。

上面的插件很好,但是我的本地服务器不支持 HTTP2。

使用 --no-http2 选项是一个快速修复:

mitmproxy -s local-redirect.py --no-http2 --view-filter localhost

mitmdump -s local-redirect.py --no-http2 localhost