def _set_hostport(self, host, port):
if port is None:
- i = host.find(':')
- if i >= 0:
+ i = host.rfind(':')
+ j = host.rfind(']') # ipv6 addresses have [...]
+ if i > j:
try:
port = int(host[i+1:])
except ValueError:
host = host[:i]
else:
port = self.default_port
+ if host[0] == '[' and host[-1] == ']':
+ host = host[1:-1]
self.host = host
self.port = port
else:
print "Expect InvalidURL"
+ for hp,h,p in (("[fe80::207:e9ff:fe9b]:8000", "fe80::207:e9ff:fe9b", 8000),
+ ("www.python.org:80", "www.python.org", 80),
+ ("www.python.org", "www.python.org", 80),
+ ("[fe80::207:e9ff:fe9b]", "fe80::207:e9ff:fe9b", 80)):
+ try:
+ http = httplib.HTTP(hp)
+ except httplib.InvalidURL:
+ print "InvalidURL raised erroneously"
+ c = http._conn
+ if h != c.host: raise AssertionError, ("Host incorrectly parsed", h, c.host)
+ if p != c.port: raise AssertionError, ("Port incorrectly parsed", p, c.host)
+
# test response with multiple message headers with the same field name.
text = ('HTTP/1.1 200 OK\r\n'
'Set-Cookie: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"\r\n'