|
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