Add timeout in url open

This commit is contained in:
Mauricio Baeza 2021-06-22 23:03:06 -05:00
parent 35a0eecd79
commit 20fbd98157
1 changed files with 7 additions and 3 deletions

View File

@ -50,6 +50,7 @@ from enum import IntEnum
from functools import wraps from functools import wraps
from pathlib import Path from pathlib import Path
from pprint import pprint from pprint import pprint
from socket import timeout
from string import Template from string import Template
from typing import Any, Union from typing import Any, Union
from urllib.request import Request, urlopen from urllib.request import Request, urlopen
@ -759,7 +760,7 @@ def get_size_screen():
return res.strip() return res.strip()
def url_open(url, data=None, headers={}, verify=True, get_json=False): def url_open(url, data=None, headers={}, verify=True, get_json=False, timeout=TIMEOUT):
err = '' err = ''
req = Request(url) req = Request(url)
for k, v in headers.items(): for k, v in headers.items():
@ -769,16 +770,19 @@ def url_open(url, data=None, headers={}, verify=True, get_json=False):
if verify: if verify:
if not data is None and isinstance(data, str): if not data is None and isinstance(data, str):
data = data.encode() data = data.encode()
response = urlopen(req, data=data) response = urlopen(req, data=data, timeout=timeout)
else: else:
context = ssl._create_unverified_context() context = ssl._create_unverified_context()
response = urlopen(req, data=data, context=context) response = urlopen(req, data=data, timeout=timeout, context=context)
except HTTPError as e: except HTTPError as e:
error(e) error(e)
err = str(e) err = str(e)
except URLError as e: except URLError as e:
error(e.reason) error(e.reason)
err = str(e.reason) err = str(e.reason)
except timeout:
err = 'timeout'
error(err)
else: else:
headers = dict(response.info()) headers = dict(response.info())
result = response.read().decode() result = response.read().decode()