barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

пятница, 9 января 2026 г.

Настройка mitmweb для учета HTTPS_PROXY и NO_PROXY

Задача

Нужно настроить 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