MCPcopy Create free account
hub / github.com/CJackHwang/AIstudioProxyAPI / _handle_connect

Method _handle_connect

stream/proxy_server.py:130–232  ·  view source on GitHub ↗

Handle CONNECT method (for HTTPS connections)

(
        self, reader: asyncio.StreamReader, writer: asyncio.StreamWriter, target: str
    )

Source from the content-addressed store, hash-verified

128 self._safe_close(writer)
129
130 async def _handle_connect(
131 self, reader: asyncio.StreamReader, writer: asyncio.StreamWriter, target: str
132 ):
133 """
134 Handle CONNECT method (for HTTPS connections)
135 """
136 host, port_str = target.split(":")
137 port = int(port_str)
138 intercept = self.should_intercept(host)
139
140 if intercept:
141 self.cert_manager.get_domain_cert(host)
142
143 writer.write(b"HTTP/1.1 200 Connection Established\r\n\r\n")
144 await writer.drain()
145
146 await reader.read(8192)
147
148 loop = asyncio.get_running_loop()
149 transport = writer.transport
150
151 if transport is None:
152 self.logger.warning(
153 f"Client writer transport is None for {host}:{port} before TLS upgrade. Closing."
154 )
155 return
156
157 ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
158 ssl_context.load_cert_chain(
159 certfile=self.cert_manager.cert_dir / f"{host}.crt",
160 keyfile=self.cert_manager.cert_dir / f"{host}.key",
161 )
162
163 client_protocol = transport.get_protocol()
164
165 new_transport = await loop.start_tls(
166 transport=transport,
167 protocol=client_protocol,
168 sslcontext=ssl_context,
169 server_side=True,
170 )
171
172 if new_transport is None:
173 self.logger.error(
174 f"loop.start_tls returned None for {host}:{port}, which is unexpected. Closing connection.",
175 exc_info=True,
176 )
177 writer.close()
178 return
179
180 client_writer = asyncio.StreamWriter(
181 transport=new_transport,
182 protocol=client_protocol,
183 reader=reader,
184 loop=loop,
185 )
186
187 try:

Calls 12

should_interceptMethod · 0.95
_forward_dataMethod · 0.95
get_domain_certMethod · 0.80
drainMethod · 0.80
readMethod · 0.80
warningMethod · 0.80
errorMethod · 0.80
closeMethod · 0.80
create_connectionMethod · 0.80
wait_closedMethod · 0.80
writeMethod · 0.45