43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
import logging
|
||
import requests
|
||
import urllib3
|
||
|
||
# Session de requêtage HTTP
|
||
session = requests.Session()
|
||
|
||
# Objet pour afficher le journal d’exécution
|
||
logger = logging.getLogger('fetch.http')
|
||
|
||
|
||
class RetryAdapter(requests.adapters.HTTPAdapter):
|
||
"""
|
||
Adapteur de requêtes réessayant les requêtes échouées avec
|
||
un délai adaptatif.
|
||
"""
|
||
def __init__(self):
|
||
# Réessaie jusqu’à dix fois la récupération de chaque page, en
|
||
# augmentant progressivement le délai entre chaque essai
|
||
retry = urllib3.util.Retry(total=10, backoff_factor=0.3)
|
||
super(RetryAdapter, self).__init__(max_retries=retry)
|
||
|
||
def send(
|
||
self, request, stream=False, timeout=None, verify=True,
|
||
cert=None, proxies=None
|
||
):
|
||
logger.debug('{} {}'.format(request.method, request.url))
|
||
return super(RetryAdapter, self).send(
|
||
request, stream=stream, timeout=timeout,
|
||
verify=verify, cert=cert, proxies=proxies
|
||
)
|
||
|
||
|
||
adapter = RetryAdapter()
|
||
session.mount('http://', adapter)
|
||
session.mount('https://', adapter)
|
||
|
||
# Identification du robot
|
||
session.headers['User-Agent'] = (
|
||
'WikimedicaDiseaseSearch/0.1 '
|
||
'(https://gitlab.com/matteodelabre/wikimedica-disease-search)'
|
||
)
|