From e3edb82f28439387ff75cdcc6f1556b89f069e40 Mon Sep 17 00:00:00 2001 From: Albertas Agejevas Date: Thu, 18 Jan 2024 00:55:21 +0200 Subject: [PATCH] Fix HTTPS proxy handling. --- vcr/stubs/__init__.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/vcr/stubs/__init__.py b/vcr/stubs/__init__.py index 4d4bb39dc..336038fff 100644 --- a/vcr/stubs/__init__.py +++ b/vcr/stubs/__init__.py @@ -186,22 +186,34 @@ def _port_postfix(self): """ Returns empty string for the default port and ':port' otherwise """ - port = self.real_connection.port + port = ( + self.real_connection.port + if not self.real_connection._tunnel_host + else self.real_connection._tunnel_port + ) default_port = {"https": 443, "http": 80}[self._protocol] return f":{port}" if port != default_port else "" + def _real_host(self): + """Returns the request host""" + if self.real_connection._tunnel_host: + # The real connection is to an HTTPS proxy + return self.real_connection._tunnel_host + else: + return self.real_connection.host + def _uri(self, url): """Returns request absolute URI""" if url and not url.startswith("/"): # Then this must be a proxy request. return url - uri = f"{self._protocol}://{self.real_connection.host}{self._port_postfix()}{url}" + uri = f"{self._protocol}://{self._real_host()}{self._port_postfix()}{url}" log.debug("Absolute URI: %s", uri) return uri def _url(self, uri): """Returns request selector url from absolute URI""" - prefix = f"{self._protocol}://{self.real_connection.host}{self._port_postfix()}" + prefix = f"{self._protocol}://{self._real_host()}{self._port_postfix()}" return uri.replace(prefix, "", 1) def request(self, method, url, body=None, headers=None, *args, **kwargs):