Задача
Нужно настроить mitmweb так, чтобы он перенаправлял исходящие запросы на другой прокси (корпоративный), учитывая HTTPS_PROXY и NO_PROXY переменные окружения.
Решение
Создаем py-скрипт для обработки NO_PROXY, называем его exclude_proxy.py:
import os
from mitmproxy import http
# Read the exclusions from the NO_PROXY environment variable
# Split the environment variable by commas to handle multiple hostnames
NO_PROXY = os.getenv("NO_PROXY", "").split(",")
def request(flow: http.HTTPFlow):
# Check if the hostname matches any entry in NO_PROXY
for hostname in NO_PROXY:
# Ensure no leading/trailing whitespace in the hostname
hostname = hostname.strip()
# If the flow's request host matches an entry in NO_PROXY, bypass the proxy
if hostname and hostname in flow.request.host:
flow.server_conn.via = None
Запускаем mitmweb:
mitmweb --mode upstream:$HTTPS_PROXY -s exclude_proxy.py