i',对mitm代理(http://mitmproxy.org/index.html)进行脚本编写,以根据其IP将HTTP和HTTPS请求和响应写入文件(每个客户端然后可以访问其自己的请求/响应),以进行移动单元测试。
据我目前所见,我不能只使用str(Flow.request)或repr(Flow.request)来获得响应\请求的原始打印,就像我在提琴手中一样,我需要从请求和响应对象的内部数据重建它。
有人知道更好的方法吗?我正在使用:
def response(ScriptContext, Flow):
Flow.request....
Flow.response....
要访问被拦截的请求或响应,我没有改变任何东西,只是观察。现在,该代理位于8080上,稍后将成为80和443上的透明代理。如果有人能做到,可以分享一些信息,我会很高兴的。
几物。首先,您可以使用str(flow.request.headers)和request.httpversion等构建自己的原始响应。但是,似乎_assemble()和_assemble_headers()可以解决问题。
基本上如此:
def request(context, flow):
req = flow.request;
try:
print("Request: -----------------");
print(req._assemble());
print("--------------------------");
except Exception as ee:
print(str(ee));
def response(context, flow):
res = flow.response;
try:
print("Response: -----------------");
print(res._assemble());
if res.content:
size = len(res.content);
size = min(size, 20);
if res.content[0:size] != res.get_decoded_content()[0:size]:
print("\n\n");
print(res.get_decoded_content());
print("--------------------------");
except Exception as ee:
print(str(ee));
您可以看到解码后的正文是否与未解码的正文不相似(尽管我可以检查gzip内容类型),我也正在打印解码后的消息。应根据当前日期将其保存到文件中,并且每个文件均以从request \ response.client_conn对象获取的客户端ip命名。这几乎解决了我的问题。与提琴手的一些检查表明,该请求稍后可重现,这正是我所需要的。
对于那些想要将rquest /响应数据复制到剪贴板的人将在这里结束:
## export the current request/response as curl/httpie/raw/request/response to clipboard
# press colon : and input one of commands and enter
export.clip curl @focus
export.clip httpie @focus
export.clip raw @focus
export.clip raw_request @focus
export.clip raw_response @focus
Mitmproxy:5.0.1