diff options
author | Senthil Kumaran <orsenthil@gmail.com> | 2009-07-25 04:24:38 (GMT) |
---|---|---|
committer | Senthil Kumaran <orsenthil@gmail.com> | 2009-07-25 04:24:38 (GMT) |
commit | 97f0c6be463bd83764e0e5d76e79f1831ef29df0 (patch) | |
tree | 37c1df16f5de614b3d7bc86bfe471f7253f76577 /Lib/urllib | |
parent | be0e177ae52f84e2787f511693d4889d7fc9d5d7 (diff) | |
download | cpython-97f0c6be463bd83764e0e5d76e79f1831ef29df0.zip cpython-97f0c6be463bd83764e0e5d76e79f1831ef29df0.tar.gz cpython-97f0c6be463bd83764e0e5d76e79f1831ef29df0.tar.bz2 |
Fixed Issue1424152 in Py3k: urllib2 fails with HTTPS over Proxy.
Diffstat (limited to 'Lib/urllib')
-rw-r--r-- | Lib/urllib/request.py | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py index b133fe4..6bc386b 100644 --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -163,6 +163,7 @@ class Request: self.full_url = unwrap(url) self.data = data self.headers = {} + self._tunnel_host = None for key, value in headers.items(): self.add_header(key, value) self.unredirected_hdrs = {} @@ -218,8 +219,12 @@ class Request: # End deprecated methods def set_proxy(self, host, type): - self.host, self.type = host, type - self.selector = self.full_url + if self.type == 'https' and not self._tunnel_host: + self._tunnel_host = self.host + else: + self.type= type + self.selector = self.full_url + self.host = host def has_proxy(self): return self.selector == self.full_url @@ -659,7 +664,7 @@ class ProxyHandler(BaseHandler): req.add_header('Proxy-authorization', 'Basic ' + creds) hostport = unquote(hostport) req.set_proxy(hostport, proxy_type) - if orig_type == proxy_type: + if orig_type == proxy_type or orig_type == 'https': # let other handlers take care of it return None else: @@ -1041,6 +1046,10 @@ class AbstractHTTPHandler(BaseHandler): # request. headers["Connection"] = "close" headers = dict((name.title(), val) for name, val in headers.items()) + + if req._tunnel_host: + h.set_tunnel(req._tunnel_host) + try: h.request(req.get_method(), req.selector, req.data, headers) r = h.getresponse() # an HTTPResponse instance |