MCPcopy Create free account
hub / github.com/mitmproxy/mitmproxy / read_body

Method read_body

mitmproxy/proxy/layers/http/_http1.py:88–123  ·  view source on GitHub ↗
(self, event: events.Event)

Source from the content-addressed store, hash-verified

86 state = start
87
88 def read_body(self, event: events.Event) -> layer.CommandGenerator[None]:
89 assert self.stream_id is not None
90 while True:
91 try:
92 if isinstance(event, events.DataReceived):
93 h11_event = self.body_reader(self.buf)
94 elif isinstance(event, events.ConnectionClosed):
95 h11_event = self.body_reader.read_eof()
96 else:
97 raise AssertionError(f"Unexpected event: {event}")
98 except h11.ProtocolError as e:
99 yield commands.CloseConnection(self.conn)
100 yield ReceiveHttp(
101 self.ReceiveProtocolError(
102 self.stream_id,
103 f"HTTP/1 protocol error: {e}",
104 code=self.ReceiveProtocolError.code,
105 )
106 )
107 return
108
109 if h11_event is None:
110 return
111 elif isinstance(h11_event, h11.Data):
112 data: bytes = bytes(h11_event.data)
113 if data:
114 yield ReceiveHttp(self.ReceiveData(self.stream_id, data))
115 elif isinstance(h11_event, h11.EndOfMessage):
116 assert self.request
117 if h11_event.headers:
118 raise NotImplementedError(f"HTTP trailers are not implemented yet.")
119 if self.request.data.method.upper() != b"CONNECT":
120 yield ReceiveHttp(self.ReceiveEndOfMessage(self.stream_id))
121 is_request = isinstance(self, Http1Server)
122 yield from self.mark_done(request=is_request, response=not is_request)
123 return
124
125 def wait(self, event: events.Event) -> layer.CommandGenerator[None]:
126 """

Callers

nothing calls this directly

Calls 2

mark_doneMethod · 0.95
ReceiveHttpClass · 0.90

Tested by

no test coverage detected