1212
1313from lib .core .data import conf
1414from lib .core .data import logger
15+ from lib .core .common import getHostHeader
1516from lib .core .common import getUnicode
1617from lib .core .common import logHTTPTraffic
1718from lib .core .enums import HTTPHEADER
@@ -28,6 +29,16 @@ class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
2829 # assuming we're in a loop
2930 max_redirections = 10
3031
32+ def _get_header_redirect (self , headers ):
33+ retVal = None
34+
35+ if "location" in headers :
36+ retVal = headers .getheaders ("location" )[0 ].split ("?" )[0 ]
37+ elif "uri" in headers :
38+ retVal = headers .getheaders ("uri" )[0 ].split ("?" )[0 ]
39+
40+ return retVal
41+
3142 def common_http_redirect (self , result , headers , code , content , msg ):
3243 content = decodePage (content , headers .get (HTTPHEADER .CONTENT_ENCODING ), headers .get (HTTPHEADER .CONTENT_TYPE ))
3344
@@ -49,10 +60,8 @@ def common_http_redirect(self, result, headers, code, content, msg):
4960 logger .log (7 , responseMsg )
5061
5162 if result :
52- if "location" in headers :
53- result .redurl = headers .getheaders ("location" )[0 ].split ("?" )[0 ]
54- elif "uri" in headers :
55- result .redurl = headers .getheaders ("uri" )[0 ].split ("?" )[0 ]
63+ if self ._get_header_redirect (headers ):
64+ result .redurl = self ._get_header_redirect (headers )
5665
5766 if hasattr (result , 'redurl' ):
5867 if not urlparse .urlsplit (result .redurl ).netloc :
@@ -76,6 +85,9 @@ def http_error_301(self, req, fp, code, msg, headers):
7685 dbgMsg += "redirect response content (%s)" % msg
7786 logger .debug (dbgMsg )
7887
88+ if self ._get_header_redirect (headers ):
89+ req .headers [HTTPHEADER .HOST ] = getHostHeader (self ._get_header_redirect (headers ))
90+
7991 result = urllib2 .HTTPRedirectHandler .http_error_301 (self , req , fp , code , msg , headers )
8092 return self .common_http_redirect (result , headers , code , content , msg )
8193
@@ -90,6 +102,9 @@ def http_error_302(self, req, fp, code, msg, headers):
90102 dbgMsg += "redirect response content (%s)" % msg
91103 logger .debug (dbgMsg )
92104
105+ if self ._get_header_redirect (headers ):
106+ req .headers [HTTPHEADER .HOST ] = getHostHeader (self ._get_header_redirect (headers ))
107+
93108 result = urllib2 .HTTPRedirectHandler .http_error_302 (self , req , fp , code , msg , headers )
94109 return self .common_http_redirect (result , headers , code , content , msg )
95110
0 commit comments