diff options
-rw-r--r-- | Lib/httplib.py | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/Lib/httplib.py b/Lib/httplib.py index 04cfca6..f299873 100644 --- a/Lib/httplib.py +++ b/Lib/httplib.py @@ -69,6 +69,7 @@ Req-sent-unread-response _CS_REQ_SENT <response_class> import errno import mimetools import socket +from urlparse import urlsplit try: from cStringIO import StringIO @@ -467,9 +468,15 @@ class HTTPConnection: # themselves. we should NOT issue it twice; some web servers (such # as Apache) barf when they see two Host: headers - # if we need a non-standard port,include it in the header - if self.port == HTTP_PORT: - self.putheader('Host', self.host) + # If we need a non-standard port,include it in the header. + # If the request is going through a proxy, but the host of + # the actual URL, not the host of the proxy. + + if url.startswith('http:'): + nil, netloc, nil, nil, nil = urlsplit(url) + self.putheader('Host', netloc) + elif self.port == HTTP_PORT: + self.putheader('Host', netloc) else: self.putheader('Host', "%s:%s" % (self.host, self.port)) @@ -856,6 +863,17 @@ def test(): print print h.getfile().read() + # minimal test that code to extract host from url works + class HTTP11(HTTP): + _http_vsn = 11 + _http_vsn_str = 'HTTP/1.1' + + h = HTTP11('www.python.org') + h.putrequest('GET', 'http://www.python.org/~jeremy/') + h.endheaders() + h.getreply() + h.close() + if hasattr(socket, 'ssl'): host = 'sourceforge.net' selector = '/projects/python' |