对于匹配正则表达式的请求,从url提供的脚本

时间:2013-08-06 13:27:02

标签: python mitmproxy

我是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

我知道我必须使用正则表达式,所以我可以正确捕获并映射它,但我不知道如何将develop url的内容作为“flow.response.content”提供。

欢迎任何帮助

1 个答案:

答案 0 :(得分: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