Переписать домен в mitmproxy

У меня есть приложение для Android, которое отправляет запрос на example.com. Как настроить mitmproxy так, чтобы все запросы к example.com/etc/else направлялись на dev.example.com/etc/else?

Я пробовал это:

Мой скрипт (rewrite.py):

import mitmproxy
from mitmproxy.models import HTTPResponse
from netlib.http import Headers

def request(context, flow):
    if 'example.com' in flow.request.url :
        flow.request.host = 'dev.example.com'

Кроме того, по какой-то причине я не вижу вывод журнала, например:

from mitmproxy import ctx
 ...
ctx.log.info("This is some informative text.")

Я запускаю mitmproxy следующим образом:

mitmproxy -p 8765 -e -s rewrite.py

person valk    schedule 12.12.2016    source источник
comment
Какую версию mitmproxy вы используете? Что произойдет, если вы запустите то же самое с mitmdump?   -  person Maximilian Hils    schedule 13.12.2016
comment
@MaximilianHils моя версия 0.18.2. То же самое с mitmdump, просто печатает мне CONNECT example.com:443, но не dev.example.com   -  person valk    schedule 13.12.2016
comment
Кроме того, def request(context, flow) нужен только один аргумент, поэтому я оставил его с def request(flow)   -  person valk    schedule 13.12.2016
comment
Да, в этом отношении мы упростили API до версии 0.18; хотя есть очень досадная ошибка, которая заглушает ошибки загрузки. github.com/mitmproxy/mitmproxy/blob/0.18.x/ examples/ отлично работает для меня — если вы все еще сталкиваетесь с проблемами, пожалуйста, просто отправьте мне ping-запрос в slack mitmproxy, чтобы сократить время обработки. Рад обновить это здесь с решением впоследствии. :)   -  person Maximilian Hils    schedule 13.12.2016


Ответы (1)


Итак, с mitmproxy v0.18.2 решение:

import mitmproxy
from mitmproxy.models import HTTPResponse
from netlib.http import Headers
from mitmproxy import ctx

def request( flow):
    if flow.request.pretty_host.endswith('example.com'):
        flow.request.host = 'dev.example.com'
        flow.request.scheme = 'http'
        flow.request.port = 80
        ctx.log.info(" --->" + flow.request.url)
person valk    schedule 25.12.2016
comment
Вы можете исключить: from mitmproxy.models import HTTPResponse и from netlib.http import Headers - person Tim Dowty; 22.01.2021