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

J W*_*J W 7 networking mitmproxy

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

我阅读了mitmproxy 插件文档api 文档 ,我已经安装了证书,并且可以通过代理监控 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()
]
Run Code Online (Sandbox Code Playgroud)
$ mitmdump -s local-redirect.py | grep pretty
Run Code Online (Sandbox Code Playgroud)

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

J W*_*J W 5

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

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

mitmproxy -s local-redirect.py --no-http2 --view-filter localhost
Run Code Online (Sandbox Code Playgroud)

或者

mitmdump -s local-redirect.py --no-http2 localhost
Run Code Online (Sandbox Code Playgroud)