|
32 | 32 | DEFAULT_HEADERS = {"Accept": "application/json",
|
33 | 33 | "Content-type": "application/json"}
|
34 | 34 |
|
| 35 | +session = None |
| 36 | + |
| 37 | + |
| 38 | +def get_session(): |
| 39 | + global session |
| 40 | + if not session: |
| 41 | + session = requests.Session() |
| 42 | + return session |
| 43 | + |
| 44 | + |
| 45 | +def close_session(): |
| 46 | + global session |
| 47 | + if session: |
| 48 | + session.close() |
| 49 | + session = None |
| 50 | + |
35 | 51 |
|
36 | 52 | def getAuthHandler(keyName, keyValue):
|
37 | 53 | if not isinstance(keyName, bytes):
|
@@ -73,27 +89,39 @@ class perfHTTPrequestHelper(object):
|
73 | 89 | 2. waits until the server response, finally forwards a result to the QueryHandler
|
74 | 90 | """
|
75 | 91 |
|
76 |
| - def __init__(self, logger, reqdata=None, session=None): |
77 |
| - self.session = session or requests.Session() |
| 92 | + def __init__(self, logger, reqdata=None, caCert=False): |
| 93 | + self.session = get_session() |
| 94 | + self.caCert = caCert |
78 | 95 | self.requestData = reqdata
|
79 | 96 | self.logger = logger
|
80 | 97 |
|
81 | 98 | def doRequest(self):
|
82 | 99 | if self.requestData and isinstance(self.requestData, requests.Request):
|
| 100 | + self.session.verify = self.caCert |
83 | 101 | _prepRequest = self.session.prepare_request(self.requestData)
|
84 | 102 | try:
|
85 | 103 | res = self.session.send(_prepRequest)
|
86 | 104 | return res
|
| 105 | + except requests.exceptions.ProxyError: |
| 106 | + close_session() |
| 107 | + self.logger.debug(f"doRequest __ ProxyError. Found configured proxies: {urllib.request.getproxies()}") |
| 108 | + res = requests.Response() |
| 109 | + res.status_code = 503 |
| 110 | + res.reason = "Unable to connect to proxy" |
| 111 | + return res |
87 | 112 | except requests.exceptions.ConnectionError:
|
| 113 | + close_session() |
88 | 114 | res = requests.Response()
|
89 | 115 | res.status_code = 503
|
90 | 116 | res.reason = "Connection refused from server"
|
91 | 117 | return res
|
92 | 118 | except requests.exceptions.RequestException as e:
|
| 119 | + close_session() |
93 | 120 | self.logger.debug('doRequest __ RequestException. Request data: {}, Response data: {}'.format(e.request, e.response))
|
94 | 121 | res = requests.Response()
|
95 | 122 | res.status_code = 404
|
96 | 123 | res.reason = "The request could not be processed from server"
|
97 | 124 | return res
|
98 | 125 | else:
|
| 126 | + close_session() |
99 | 127 | raise TypeError('doRequest __ Error: request data wrong format')
|
0 commit comments