diff --git a/behave_utils/http.py b/behave_utils/http.py index bf324deb06a1eefe8194ac975a7f66616b95bb3e..50e7f25a83085deed0ae28bec5f795856fc4d742 100644 --- a/behave_utils/http.py +++ b/behave_utils/http.py @@ -26,6 +26,7 @@ def redirect( session: requests.Session, prefix: str, address: ipaddress.IPv4Address, + port: int = 0, /, certificate: str|None = None, ) -> None: """ @@ -40,7 +41,7 @@ def redirect( """ if not prefix.startswith("http://") or prefix.startswith("https://"): prefix = f"http://{prefix}" if certificate is None else f"https://{prefix}" - session.mount(prefix, _DirectedAdapter(address, certificate)) + session.mount(prefix, _DirectedAdapter(address, port, certificate)) class _DirectedAdapter(requests.adapters.HTTPAdapter): @@ -54,19 +55,20 @@ class _DirectedAdapter(requests.adapters.HTTPAdapter): function. """ - def __init__(self, destination: ipaddress.IPv4Address, certificate: str|None): + def __init__(self, address: ipaddress.IPv4Address, port: int, certificate: str|None, /): super().__init__() - self.destination = destination + self.destination = address, port self.certificate = certificate def get_connection(self, url: str, proxies: Mapping[str, str]|None = None) -> connectionpool.HTTPConnectionPool: + address, port = self.destination parts = urlparse(url) if parts.hostname is None: raise LocationParseError(url) if parts.scheme == "https": - return _HTTPSConnectionPool(parts.hostname, parts.port, address=self.destination) + return _HTTPSConnectionPool(parts.hostname, port or parts.port, address=address) if parts.scheme == "http": - return _HTTPConnectionPool(parts.hostname, parts.port, address=self.destination) + return _HTTPConnectionPool(parts.hostname, port or parts.port, address=address) raise URLSchemeUnknown(parts.scheme) def cert_verify(