3333from lib .request .basic import decodePage
3434from lib .request .basic import parseResponse
3535from thirdparty import six
36+ from thirdparty .six .moves import http_client as _http_client
3637from thirdparty .six .moves import urllib as _urllib
3738
3839class SmartRedirectHandler (_urllib .request .HTTPRedirectHandler ):
@@ -67,7 +68,12 @@ def _ask_redirect_choice(self, redcode, redurl, method):
6768 self .redirect_request = self ._redirect_request
6869
6970 def _redirect_request (self , req , fp , code , msg , headers , newurl ):
70- return _urllib .request .Request (newurl .replace (' ' , '%20' ), data = req .data , headers = req .headers , origin_req_host = req .get_origin_req_host () if hasattr (req , "get_origin_req_host" ) else req .origin_req_host )
71+ retVal = _urllib .request .Request (newurl .replace (' ' , '%20' ), data = req .data , headers = req .headers , origin_req_host = req .get_origin_req_host () if hasattr (req , "get_origin_req_host" ) else req .origin_req_host )
72+
73+ if hasattr (req , "redirect_dict" ):
74+ retVal .redirect_dict = req .redirect_dict
75+
76+ return retVal
7177
7278 def http_error_302 (self , req , fp , code , msg , headers ):
7379 start = time .time ()
@@ -78,7 +84,10 @@ def http_error_302(self, req, fp, code, msg, headers):
7884 try :
7985 content = fp .fp .read (MAX_CONNECTION_TOTAL_SIZE )
8086 fp .fp = io .BytesIO (content )
81- except : # e.g. IncompleteRead
87+ except _http_client .IncompleteRead as ex :
88+ content = ex .partial
89+ fp .fp = io .BytesIO (content )
90+ except :
8291 content = b""
8392
8493 content = decodePage (content , headers .get (HTTP_HEADER .CONTENT_ENCODING ), headers .get (HTTP_HEADER .CONTENT_TYPE ))
0 commit comments