diff --git a/src/urllib3/_async/connection.py b/src/urllib3/_async/connection.py index 50b25e9f..a61d88e8 100644 --- a/src/urllib3/_async/connection.py +++ b/src/urllib3/_async/connection.py @@ -210,7 +210,16 @@ def _build_tunnel_request(host, port, headers): Builds a urllib3 Request object that is set up correctly to request a proxy to establish a TCP tunnel to the remote host. """ - target = "%s:%d" % (host, port) + + try: + socket.inet_pton(socket.AF_INET6, host) + except OSError: + # Not a raw IPv6 address + target = "%s:%d" % (host, port) + else: + # raw IPv6 address + target = "[%s]:%d" % (host, port) + if not isinstance(target, bytes): target = target.encode('latin1') diff --git a/test/with_dummyserver/test_socketlevel.py b/test/with_dummyserver/test_socketlevel.py index 916d9cea..37c2c1d5 100644 --- a/test/with_dummyserver/test_socketlevel.py +++ b/test/with_dummyserver/test_socketlevel.py @@ -1022,7 +1022,6 @@ def handler(listener): assert exception.response.status_code == 401 assert exception.response.headers['x-custom-header'] == 'yougotit' - @pytest.mark.xfail def test_connect_ipv6_addr(self): ipv6_addr = '2001:4998:c:a06::2:4008'