Пример #1
0
            def mock_once(self, http1obj, req):
                self.call += 1

                if self.call == 2:
                    headers = http1.assemble_request_head(req)
                    http1obj.server_conn.wfile.write(headers)
                    http1obj.server_conn.wfile.flush()
                    raise exceptions.TcpDisconnect
                else:
                    headers = http1.assemble_request_head(req)
                    http1obj.server_conn.wfile.write(headers)
                    http1obj.server_conn.wfile.flush()
Пример #2
0
            def mock_once(self, http1obj, req):
                self.call += 1

                if self.call == 2:
                    headers = http1.assemble_request_head(req)
                    http1obj.server_conn.wfile.write(headers)
                    http1obj.server_conn.wfile.flush()
                    raise exceptions.TcpDisconnect
                else:
                    headers = http1.assemble_request_head(req)
                    http1obj.server_conn.wfile.write(headers)
                    http1obj.server_conn.wfile.flush()
Пример #3
0
    def send(self, event: HttpEvent) -> layer.CommandGenerator[None]:
        if isinstance(event, RequestProtocolError):
            yield commands.CloseConnection(self.conn)
            return

        if not self.stream_id:
            assert isinstance(event, RequestHeaders)
            self.stream_id = event.stream_id
            self.request = event.request
        assert self.stream_id == event.stream_id

        if isinstance(event, RequestHeaders):
            request = event.request
            if request.is_http2:
                # Convert to an HTTP/1 request.
                request = request.copy(
                )  # (we could probably be a bit more efficient here.)
                request.http_version = "HTTP/1.1"
                if "Host" not in request.headers and request.authority:
                    request.headers.insert(0, "Host", request.authority)
                request.authority = ""
            raw = http1.assemble_request_head(request)
            yield commands.SendData(self.conn, raw)
        elif isinstance(event, RequestData):
            assert self.request
            if "chunked" in self.request.headers.get("transfer-encoding",
                                                     "").lower():
                raw = b"%x\r\n%s\r\n" % (len(event.data), event.data)
            else:
                raw = event.data
            if raw:
                yield commands.SendData(self.conn, raw)
        elif isinstance(event, RequestEndOfMessage):
            assert self.request
            if "chunked" in self.request.headers.get("transfer-encoding",
                                                     "").lower():
                yield commands.SendData(self.conn, b"0\r\n\r\n")
            elif http1.expected_http_body_size(self.request,
                                               self.response) == -1:
                yield commands.CloseConnection(self.conn, half_close=True)
            yield from self.mark_done(request=True)
        else:
            raise AssertionError(f"Unexpected event: {event}")
Пример #4
0
 def send_request_headers(self, request):
     headers = http1.assemble_request_head(request)
     self.server_conn.wfile.write(headers)
     self.server_conn.wfile.flush()
Пример #5
0
 def send_request_headers(self, request):
     headers = http1.assemble_request_head(request)
     self.server_conn.wfile.write(headers)
     self.server_conn.wfile.flush()