| 578 | self.view.remove([self.flow]) |
| 579 | |
| 580 | def put(self, flow_id) -> None: |
| 581 | flow: mitmproxy.flow.Flow = self.flow |
| 582 | flow.backup() |
| 583 | try: |
| 584 | for a, b in self.json.items(): |
| 585 | if a == "request" and hasattr(flow, "request"): |
| 586 | request: mitmproxy.http.Request = flow.request |
| 587 | for k, v in b.items(): |
| 588 | if k in ["method", "scheme", "host", "path", "http_version"]: |
| 589 | setattr(request, k, str(v)) |
| 590 | elif k == "port": |
| 591 | request.port = int(v) |
| 592 | elif k == "headers": |
| 593 | request.headers.clear() |
| 594 | for header in v: |
| 595 | request.headers.add(*header) |
| 596 | elif k == "trailers": |
| 597 | if request.trailers is not None: |
| 598 | request.trailers.clear() |
| 599 | else: |
| 600 | request.trailers = mitmproxy.http.Headers() |
| 601 | for trailer in v: |
| 602 | request.trailers.add(*trailer) |
| 603 | elif k == "content": |
| 604 | request.text = v |
| 605 | else: |
| 606 | raise APIError(400, f"Unknown update request.{k}: {v}") |
| 607 | |
| 608 | elif a == "response" and hasattr(flow, "response"): |
| 609 | response: mitmproxy.http.Response = flow.response |
| 610 | for k, v in b.items(): |
| 611 | if k in ["msg", "http_version"]: |
| 612 | setattr(response, k, str(v)) |
| 613 | elif k == "code": |
| 614 | response.status_code = int(v) |
| 615 | elif k == "headers": |
| 616 | response.headers.clear() |
| 617 | for header in v: |
| 618 | response.headers.add(*header) |
| 619 | elif k == "trailers": |
| 620 | if response.trailers is not None: |
| 621 | response.trailers.clear() |
| 622 | else: |
| 623 | response.trailers = mitmproxy.http.Headers() |
| 624 | for trailer in v: |
| 625 | response.trailers.add(*trailer) |
| 626 | elif k == "content": |
| 627 | response.text = v |
| 628 | else: |
| 629 | raise APIError(400, f"Unknown update response.{k}: {v}") |
| 630 | elif a == "marked": |
| 631 | flow.marked = b |
| 632 | elif a == "comment": |
| 633 | flow.comment = b |
| 634 | else: |
| 635 | raise APIError(400, f"Unknown update {a}: {b}") |
| 636 | except APIError: |
| 637 | flow.revert() |