def put(self, flow_id): flow: mitmproxy.flow.Flow = self.flow flow.backup() try: for a, b in self.json.items(): if a == "request" and hasattr(flow, "request"): request: mitmproxy.http.Request = flow.request for k, v in b.items(): if k in ["method", "scheme", "host", "path", "http_version"]: setattr(request, k, str(v)) elif k == "port": request.port = int(v) elif k == "headers": request.headers.clear() for header in v: request.headers.add(*header) elif k == "trailers": if request.trailers is not None: request.trailers.clear() else: request.trailers = mitmproxy.http.Headers() for trailer in v: request.trailers.add(*trailer) elif k == "content": request.text = v else: raise APIError(400, f"Unknown update request.{k}: {v}") elif a == "response" and hasattr(flow, "response"): response: mitmproxy.http.Response = flow.response for k, v in b.items(): if k in ["msg", "http_version"]: setattr(response, k, str(v)) elif k == "code": response.status_code = int(v) elif k == "headers": response.headers.clear() for header in v: response.headers.add(*header) elif k == "trailers": if response.trailers is not None: response.trailers.clear() else: response.trailers = mitmproxy.http.Headers() for trailer in v: response.trailers.add(*trailer) elif k == "content": response.text = v else: raise APIError(400, f"Unknown update response.{k}: {v}") elif a == "marked": flow.marked = b else: raise APIError(400, f"Unknown update {a}: {b}") except APIError: flow.revert() raise self.view.update([flow])
def put(self, flow_id): flow = self.flow flow.backup() try: for a, b in self.json.items(): if a == "request" and hasattr(flow, "request"): request = flow.request for k, v in b.items(): if k in [ "method", "scheme", "host", "path", "http_version" ]: setattr(request, k, str(v)) elif k == "port": request.port = int(v) elif k == "headers": request.headers.clear() for header in v: request.headers.add(*header) elif k == "trailers": request.trailers.clear() for trailer in v: request.trailers.add(*trailer) elif k == "content": request.text = v else: raise APIError( 400, "Unknown update request.{}: {}".format(k, v)) elif a == "response" and hasattr(flow, "response"): response = flow.response for k, v in b.items(): if k in ["msg", "http_version"]: setattr(response, k, str(v)) elif k == "code": response.status_code = int(v) elif k == "headers": response.headers.clear() for header in v: response.headers.add(*header) elif k == "trailers": response.trailers.clear() for trailer in v: response.trailers.add(*trailer) elif k == "content": response.text = v else: raise APIError( 400, "Unknown update response.{}: {}".format(k, v)) else: raise APIError(400, "Unknown update {}: {}".format(a, b)) except APIError: flow.revert() raise self.view.update([flow])
def put(self, flow_id): flow = self.flow flow.backup() try: for a, b in self.json.items(): if a == "request" and hasattr(flow, "request"): request = flow.request for k, v in b.items(): if k in ["method", "scheme", "host", "path", "http_version"]: setattr(request, k, str(v)) elif k == "port": request.port = int(v) elif k == "headers": request.headers.clear() for header in v: request.headers.add(*header) elif k == "content": request.text = v else: raise APIError(400, "Unknown update request.{}: {}".format(k, v)) elif a == "response" and hasattr(flow, "response"): response = flow.response for k, v in b.items(): if k in ["msg", "http_version"]: setattr(response, k, str(v)) elif k == "code": response.status_code = int(v) elif k == "headers": response.headers.clear() for header in v: response.headers.add(*header) elif k == "content": response.text = v else: raise APIError(400, "Unknown update response.{}: {}".format(k, v)) else: raise APIError(400, "Unknown update {}: {}".format(a, b)) except APIError: flow.revert() raise self.view.update([flow])