@@ -20,22 +20,24 @@ def _create_request(cookie_stg,url,method,headers,body,connect_timeout=10,reques
2020if headers :
2121for key in headers .keys ():
2222req_headers .add (key ,headers [key ])
23- return tornado .httpclient .HTTPRequest (url ,method ,req_headers ,body ,None ,None ,connect_timeout ,request_timeout )
23+ return tornado .httpclient .HTTPRequest (url ,method ,req_headers ,body ,None ,None ,connect_timeout ,request_timeout , follow_redirects = False )
2424
25- class HandlerFilter (object ):
26- def __init__ (self ,handler ,filter ):
27- self .__handler = handler
28- self .__filter = filter
29- def handle_response (self ,response ,seq ):
30- self .__filter (response )
31- self .__handler (response ,seq )
25+ # class HandlerFilter(object):
26+ # def __init__(self,handler,filter):
27+ # self.__handler = handler
28+ # self.__filter = filter
29+ # def handle_response(self,response,seq):
30+ # self.__filter(response)
31+ # self.__handler(response,seq)
3232
3333
3434class Session (object ):
3535def __init__ (self ):
3636self ._cookie_stg = cookie_storage .CookieStg ()
3737
3838def _filter_response (self ,response ):
39+ if not response :
40+ return
3941headers = response .headers
4042cookie_list = headers .get_list ("set-cookie" )
4143domain = get_domain (response .request .url )
@@ -46,16 +48,25 @@ def _filter_response(self,response):
4648def fetch (self ,url ,method ,headers ,body ,connect_timeout = 10 ,request_timeout = 10 ):
4749req = _create_request (self ._cookie_stg ,url ,method ,headers ,body ,connect_timeout ,request_timeout )
4850client = tornado .httpclient .HTTPClient ()
49- response = client .fetch (req )
50- if not response .error :
51- self ._filter_response (response )
51+ try :
52+ response = client .fetch (req )
53+ except Exception ,e :
54+ response = e .response
55+ if not response :
56+ return None
57+ self ._filter_response (response )
5258if response .code in (301 ,302 ,303 ,307 ):
5359new_url = urlparse .urljoin (url ,response .headers ["Location" ])
5460return self .fetch (new_url ,method ,headers ,body ,connect_timeout ,request_timeout )
5561return response
5662
57- def send_form (self ,action ,method ,data_map ,connect_timeout = 10 ,request_timeout = 10 ):
58- add_header = {"content-type" :"application/x-www-form-urlencoded" }
63+ def send_form (self ,action ,method ,data_map ,add_header_ = None ,connect_timeout = 10 ,request_timeout = 10 ):
64+ if not add_header_ :
65+ add_header = {}
66+ else :
67+ import copy
68+ add_header = copy .copy (add_header_ )
69+ add_header ["content-type" ]= "application/x-www-form-urlencoded"
5970try :
6071import urllib
6172args = urllib .urlencode (data_map )
@@ -97,8 +108,10 @@ def fetch(self,url,method,headers,body,response_handler,connect_timeout=10,reque
97108client .fetch (req ,handler .handle_response )
98109return True
99110
100- def send_form (self ,action ,method ,data_map ,reponse_handler ,connect_timeout = 10 ,request_timeout = 10 ):
101- add_header = {"content-type" :"application/x-www-form-urlencoded" }
111+ def send_form (self ,action ,method ,data_map ,reponse_handler ,add_header = None ,connect_timeout = 10 ,request_timeout = 10 ):
112+ if not add_header :
113+ add_header = {}
114+ add_header ["content-type" ]= "application/x-www-form-urlencoded"
102115try :
103116import urllib
104117args = urllib .urlencode (data_map )