from h11._receivebuffer import ReceiveBuffer def monkey_patch(): def _maybe_extract_lines_crlf_insensitive(self): if self._data[self._start : self._start + 2] == b"\r\n": self._start += 2 return [] elif self._data[self._start : self._start + 1] == b"\n": self._start += 1 return [] else: data = self.maybe_extract_until_next(b"\r\n\r\n") \ or self.maybe_extract_until_next(b"\n\n") if data is None: # header not finish return None lines = [] lf_lines = data.split(b"\r\n") for lf_line in lf_lines: lines += lf_line.split(b"\n") assert lines[-2] == lines[-1] == b"" del lines[-2:] return lines _original_ReceiveBuffer_maybe_extract_lines = ReceiveBuffer.maybe_extract_lines ReceiveBuffer.maybe_extract_lines = _maybe_extract_lines_crlf_insensitive def _recover(): ReceiveBuffer.maybe_extract_lines = _original_ReceiveBuffer_maybe_extract_lines return _recover