From f99afbafb505c0fcb0f2696c461ed36006d33ece Mon Sep 17 00:00:00 2001 From: RatanShreshtha Date: Sun, 14 Apr 2019 09:07:16 +0530 Subject: [PATCH 1/2] Fix test_connect_ipv6_addr. --- src/urllib3/_async/connection.py | 8 +++++++- test/with_dummyserver/test_socketlevel.py | 1 - 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/urllib3/_async/connection.py b/src/urllib3/_async/connection.py index 50b25e9f..84874481 100644 --- a/src/urllib3/_async/connection.py +++ b/src/urllib3/_async/connection.py @@ -210,7 +210,13 @@ 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) + target = "[%s]:%d" % (host, port) + except OSError: + 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' From 900dbfd373a2507ddcee890a7b7f1d25f19e82eb Mon Sep 17 00:00:00 2001 From: RatanShreshtha Date: Sun, 14 Apr 2019 13:12:26 +0530 Subject: [PATCH 2/2] Update try block to check ipv6 or not --- src/urllib3/_async/connection.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/urllib3/_async/connection.py b/src/urllib3/_async/connection.py index 84874481..a61d88e8 100644 --- a/src/urllib3/_async/connection.py +++ b/src/urllib3/_async/connection.py @@ -213,9 +213,12 @@ def _build_tunnel_request(host, port, headers): try: socket.inet_pton(socket.AF_INET6, host) - target = "[%s]:%d" % (host, port) 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')