def make_http_request(method, url, data=None, headers=None, verify=None, timeout=None, retry_number=1, delay=1):
method = method.upper()
if method not in ["POST", "GET", "PUT", "DELETE"]:
raise ValueError("Invalid HTTP method, use one of available methods: POST, GET, PUT, DELETE")
for attempt in range(retry_number + 1):
try:
if method == "POST":
response = requests.post(url, data=json.dumps(data), headers=headers, verify=verify, timeout=timeout)
elif method == "GET":
response = requests.get(url, headers=headers, verify=verify, timeout=timeout)
elif method == "PUT":
response = requests.put(url, data=json.dumps(data), headers=headers, verify=verify, timeout=timeout)
elif method == "DELETE":
response = requests.delete(url, headers=headers, verify=verify, timeout=timeout)
if response.status_code in [401, 409] or 'not authorized' in response.text.lower():
return response
if response.status_code in [500, 502, 503, 504]:
if attempt < retry_number:
sleep(delay)
delay = delay + 1
continue
else:
raise HTTPError(response=response)
return response
except Exception as e:
if attempt < retry_number:
sleep(1)
else:
raise e