MCPcopy Create free account
hub / github.com/python-websockets/websockets / HTTPProxyConnection

Class HTTPProxyConnection

src/websockets/asyncio/client.py:725–781  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

723
724
725class HTTPProxyConnection(asyncio.Protocol):
726 def __init__(
727 self,
728 ws_uri: WebSocketURI,
729 proxy: Proxy,
730 user_agent_header: str | None = None,
731 ):
732 self.ws_uri = ws_uri
733 self.proxy = proxy
734 self.user_agent_header = user_agent_header
735
736 self.reader = StreamReader()
737 self.parser = Response.parse(
738 self.reader.read_line,
739 self.reader.read_exact,
740 self.reader.read_to_eof,
741 proxy=True,
742 )
743
744 loop = asyncio.get_running_loop()
745 self.response: asyncio.Future[Response] = loop.create_future()
746
747 def run_parser(self) -> None:
748 try:
749 next(self.parser)
750 except StopIteration as exc:
751 response = exc.value
752 if 200 <= response.status_code < 300:
753 self.response.set_result(response)
754 else:
755 self.response.set_exception(InvalidProxyStatus(response))
756 except Exception as exc:
757 proxy_exc = InvalidProxyMessage(
758 "did not receive a valid HTTP response from proxy"
759 )
760 proxy_exc.__cause__ = exc
761 self.response.set_exception(proxy_exc)
762
763 def connection_made(self, transport: asyncio.BaseTransport) -> None:
764 transport = cast(asyncio.Transport, transport)
765 self.transport = transport
766 self.transport.write(
767 prepare_connect_request(self.proxy, self.ws_uri, self.user_agent_header)
768 )
769
770 def data_received(self, data: bytes) -> None:
771 self.reader.feed_data(data)
772 self.run_parser()
773
774 def eof_received(self) -> None:
775 self.reader.feed_eof()
776 self.run_parser()
777
778 def connection_lost(self, exc: Exception | None) -> None:
779 self.reader.feed_eof()
780 if exc is not None:
781 self.response.set_exception(exc)
782

Callers 1

connect_http_proxyFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…