1

我是 Python 中的一个完整的 n00b,并且正在尝试找出 mitmproxy 的存根。我已经尝试过文档,但他们认为我们知道 Python,所以我陷入了僵局。

我一直在使用脚本:

original_url = 'http://production.domain.com/1/2/3'
new_content_path = '/home/andrepadez/proj/main.js'
body = open(new_content_path, 'r').read()

def response(context, flow):
    url = flow.request.get_url()
    if url == original_url:
        flow.response.content = body

如您所料,代理将每个请求都发送到“ http://production.domain.com/1/2/3 ”并提供我文件的内容。

我需要它更加动态:对于“ http://production.domain.com/ *”的每个请求,我需要提供一个对应的 URL,例如: http ://production.domain.com/1/4 /3 -> http://develop.domain.com/1/4/3

我知道我必须使用正则表达式,这样我才能正确捕获和映射它,但我不知道如何将开发 url 的内容作为“flow.response.content”提供。

欢迎任何帮助

4

1 回答 1

1

你必须做这样的事情:

import re

# In order not to re-read the original file every time, we maintain
# a cache of already-read bodies.
bodies = { }

def response(context, flow):
    # Intercept all URLs
    url = flow.request.get_url()
    # Check if this URL is one of "ours" (check out Python regexps)
    m = re.search('REGEXP_FOR_ORIGINAL_URL/(\d+)/(\d+)/(\d+)', url)
    if None != m:
        # It is, and m will contain this information
        # The three numbers are in m.group(1), (2), (3)
        key = "%d.%d.%d" % ( m.group(1), m.group(2), m.group(3) )
        try:
            body = bodies[key]
        except KeyError:
            # We do not yet have this body
            body = // whatever is necessary to retrieve this body
                 = open("%s.txt" % ( key ), 'r').read()
            bodies[key] = body
        flow.response.content = body
于 2013-08-06T14:16:46.887 回答