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

Method read_headers

mitmproxy/proxy/layers/http/_http1.py:281–329  ·  view source on GitHub ↗
(
        self, event: events.ConnectionEvent
    )

Source from the content-addressed store, hash-verified

279 raise AssertionError(f"Unexpected event: {event}")
280
281 def read_headers(
282 self, event: events.ConnectionEvent
283 ) -> layer.CommandGenerator[None]:
284 if isinstance(event, events.DataReceived):
285 request_head = self.buf.maybe_extract_lines()
286 if request_head:
287 try:
288 self.request = http1.read_request_head(
289 [bytes(x) for x in request_head]
290 )
291 expected_body_size = http1.expected_http_body_size(self.request)
292 except ValueError as e:
293 yield commands.SendData(self.conn, make_error_response(400, str(e)))
294 yield commands.CloseConnection(self.conn)
295 if self.request:
296 # we have headers that we can show in the ui
297 yield ReceiveHttp(
298 RequestHeaders(self.stream_id, self.request, False)
299 )
300 yield ReceiveHttp(
301 RequestProtocolError(
302 self.stream_id, str(e), ErrorCode.GENERIC_CLIENT_ERROR
303 )
304 )
305 else:
306 yield commands.Log(
307 f"{human.format_address(self.conn.peername)}: {e}"
308 )
309 self.state = self.done
310 return
311 yield ReceiveHttp(
312 RequestHeaders(
313 self.stream_id, self.request, expected_body_size == 0
314 )
315 )
316 self.body_reader = make_body_reader(expected_body_size)
317 self.state = self.read_body
318 yield from self.state(event)
319 else:
320 pass # FIXME: protect against header size DoS
321 elif isinstance(event, events.ConnectionClosed):
322 buf = bytes(self.buf)
323 if buf.strip():
324 yield commands.Log(
325 f"Client closed connection before completing request headers: {buf!r}"
326 )
327 yield commands.CloseConnection(self.conn)
328 else:
329 raise AssertionError(f"Unexpected event: {event}")
330
331 def mark_done(
332 self, *, request: bool = False, response: bool = False

Callers

nothing calls this directly

Calls 6

ReceiveHttpClass · 0.90
make_error_responseFunction · 0.85
RequestHeadersClass · 0.85
make_body_readerFunction · 0.85
stateMethod · 0.45

Tested by

no test coverage detected