New submission from Charles Stephens: Back through the mists of time, there was a change to strip square brackets IPv6 address host literals in HTTPConnection._get_hostport():
https://hg.python.org/cpython/diff/433606e9546c/Lib/httplib.py However, the code mixed tabs and spaces and was "corected" by: https://hg.python.org/cpython/diff/9e2b94a3b5dc/Lib/httplib.py However, the intent was changed in the second diff and brackets won't be stripped. This causes problems when IPv6 address URL's are used with the requests package: In [1]: import httplib In [2]: con = httplib.HTTPConnection('[fe80::26a9:37ff:fe00:f764%eth0]', 15482) In [3]: con.request("GET", "/api/api-version") --------------------------------------------------------------------------- gaierror Traceback (most recent call last) <ipython-input-3-28f1bab26dc1> in <module>() ----> 1 con.request("GET", "/api/api-version") /usr/lib/python2.7/httplib.pyc in request(self, method, url, body, headers) 977 def request(self, method, url, body=None, headers={}): 978 """Send a complete request to the server.""" --> 979 self._send_request(method, url, body, headers) 980 981 def _set_content_length(self, body): /usr/lib/python2.7/httplib.pyc in _send_request(self, method, url, body, headers) 1011 for hdr, value in headers.iteritems(): 1012 self.putheader(hdr, value) -> 1013 self.endheaders(body) 1014 1015 def getresponse(self, buffering=False): /usr/lib/python2.7/httplib.pyc in endheaders(self, message_body) 973 else: 974 raise CannotSendHeader() --> 975 self._send_output(message_body) 976 977 def request(self, method, url, body=None, headers={}): /usr/lib/python2.7/httplib.pyc in _send_output(self, message_body) 833 msg += message_body 834 message_body = None --> 835 self.send(msg) 836 if message_body is not None: 837 #message_body was not a string (i.e. it is a file) and /usr/lib/python2.7/httplib.pyc in send(self, data) 795 if self.sock is None: 796 if self.auto_open: --> 797 self.connect() 798 else: 799 raise NotConnected() /usr/lib/python2.7/httplib.pyc in connect(self) 776 """Connect to the host and port specified in __init__.""" 777 self.sock = socket.create_connection((self.host,self.port), --> 778 self.timeout, self.source_address) 779 780 if self._tunnel_host: /usr/lib/python2.7/socket.pyc in create_connection(address, timeout, source_address) 551 host, port = address 552 err = None --> 553 for res in getaddrinfo(host, port, 0, SOCK_STREAM): 554 af, socktype, proto, canonname, sa = res 555 sock = None gaierror: [Errno -2] Name or service not known ---------- components: Library (Lib) files: get_hostport.diff keywords: patch messages: 279509 nosy: cfs-pure priority: normal severity: normal status: open title: httplib/http.client HTTPConnection._get_hostport() regression versions: Python 2.7, Python 3.3, Python 3.4, Python 3.5, Python 3.6, Python 3.7 Added file: http://bugs.python.org/file45233/get_hostport.diff _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue28539> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com