1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| import csv from mitmproxy import http import datetime import os
class ResponseRecorder: def __init__(self): self.records = [] self.init_datetime = datetime.datetime.now().strftime("%Y%m%d%H%M%S") os.makedirs(self.init_datetime)
def response(self, flow: http.HTTPFlow): if not "api.xxx.com" in flow.request.url: req_datetime = datetime.datetime.now().strftime("%Y%m%d%H%M%S") req_url = flow.request.url req_method = flow.request.method req_headers = dict(flow.request.headers) req_params = dict(flow.request.query or {}) req_text = flow.request.get_text() res_headers = dict(flow.response.headers) res_text = flow.response.get_text() record = { "Req_datetime": req_datetime, "Req_url": req_url, "Req_method": req_method, "Req_headers": req_headers, "Req_params": req_params, "Req_text": req_text, "Res_headers": res_headers, "Res_text": res_text, } print(f"{record['Req_url']} {record['Req_method']}") self.records.append(record)
with open(f"./{self.init_datetime}/res_{req_datetime}.txt", "w", newline="", encoding="utf-8") as file: file.write(res_text)
def done(self): with open(f"api_requests{self.init_datetime}.csv", "w", newline="", encoding="utf-8") as csvfile: fieldnames = ["Req_datetime", "Req_url", "Req_method", "Req_headers", "Req_params", "Req_text", "Res_headers", "Res_text"] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for record in self.records: record['Res_text'] = '' writer.writerow(record)
with open(f"api_requests{self.init_datetime}.txt", "w", newline="", encoding="utf-8") as file: fieldnames = ["Req_datetime", "Req_url", "Req_method", "Req_headers", "Req_params", "Req_text", "Res_headers", "Res_text"] for record in self.records: s = f'==={fieldnames[0]}===\r\n{record[fieldnames[0]]}\r\n==={fieldnames[1]}===\r\n{record[fieldnames[1]]}\r\n==={fieldnames[2]}===\r\n{record[fieldnames[2]]}\r\n==={fieldnames[3]}===\r\n{record[fieldnames[3]]}\r\n==={fieldnames[4]}===\r\n{record[fieldnames[4]]}\r\n==={fieldnames[5]}===\r\n{record[fieldnames[5]]}\r\n==={fieldnames[6]}===\r\n{record[fieldnames[6]]}\r\n==={fieldnames[7]}===\r\n{record[fieldnames[7]]}\r\n===END===\r\n\r\n' file.write(s)
addons = [ ResponseRecorder() ]
|