我是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”提供。
欢迎任何帮助
答案 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