88
99from tigeropen .common .consts import THREAD_LOCAL
1010from tigeropen .common .exceptions import RequestException , ResponseException
11+ from urllib3 import PoolManager
1112
12- try :
13- import httplib
14- except ImportError :
15- import http .client as httplib
16- try :
17- import urlparse
18- except ImportError :
19- import urllib .parse as urlparse
20- try :
21- from urllib .parse import quote_plus
22- except ImportError :
23- from urllib import quote_plus
24-
25-
26- def url_encode (params , charset ):
27- query_string = ""
28- for (k , v ) in params .items ():
29- value = v
30- if not isinstance (value , str ):
31- value = json .dumps (value , ensure_ascii = False )
32- value = quote_plus (value , encoding = charset )
33- query_string += ("&" + k + "=" + value )
34- query_string = query_string [1 :]
35- return query_string
36-
37-
38- def get_http_connection (url , query_string , timeout ):
39- url_parse_result = urlparse .urlparse (url )
40- host = url_parse_result .hostname
41- port = 80
42- connection = httplib .HTTPConnection (host = host , port = port , timeout = timeout )
43- if url .find ("https" ) == 0 :
44- port = 443
45- connection = httplib .HTTPSConnection (host = host , port = port , timeout = timeout )
46- url = url_parse_result .scheme + "://" + url_parse_result .hostname
47- if url_parse_result .port :
48- url += url_parse_result .port
49- url += url_parse_result .path
50- if query_string :
51- url += ('?' + query_string )
52- return url , connection
13+ http_pool = PoolManager ()
5314
5415
5516def do_post (url , query_string = None , headers = None , params = None , timeout = 15 , charset = None ):
@@ -63,36 +24,16 @@ def do_get(url, query_string=None, headers=None, params=None, timeout=15, charse
6324
6425
6526def do_request (method , url , query_string = None , headers = None , params = None , timeout = 15 , charset = None ):
66- url , connection = get_http_connection (url , query_string , timeout )
67-
68- try :
69- connection .connect ()
70- except Exception as e :
71- raise RequestException ('[' + THREAD_LOCAL .uuid + ']' + method + ' connect failed. url: ' + url
72- + ' headers: ' + str (headers )
73- + ' params: ' + str (params ) + ' detail: ' + str (e ))
7427 try :
75- connection .request (method , url , body = json .dumps (params ), headers = headers )
28+ response = http_pool .request (method , url = url , fields = query_string , body = json .dumps (params ), headers = headers ,
29+ timeout = timeout ,
30+ )
7631 except Exception as e :
7732 raise RequestException ('[' + THREAD_LOCAL .uuid + ']' + method + ' request failed. url: ' + url
7833 + ' headers: ' + str (headers )
7934 + ' params: ' + str (params ) + ' detail: ' + str (e ))
80- try :
81- response = connection .getresponse ()
82- result = response .read ()
83- except Exception as e :
84- raise ResponseException ('[' + THREAD_LOCAL .uuid + '] read response error ' +
85- ' headers: ' + str (headers ) +
86- ' params: ' + str (params ))
8735 if response .status != 200 :
88- if charset :
89- result = result .decode (charset )
9036 raise ResponseException ('[' + THREAD_LOCAL .uuid + ']invalid http status ' + str (response .status ) +
9137 ' headers: ' + str (headers ) +
92- ' detail body:' + result + ' params: ' + str (params ))
93- try :
94- response .close ()
95- connection .close ()
96- except Exception as e :
97- pass
98- return result
38+ ' detail body:' + str (response .data ) + ' params: ' + str (params ))
39+ return response .data
0 commit comments