wikimedica-disease-search/data/fetch/http.py

43 lines
1.2 KiB
Python
Raw Normal View History

import logging
import requests
import urllib3
# Session de requêtage HTTP
session = requests.Session()
# Objet pour afficher le journal dexécution
logger = logging.getLogger('fetch.http')
2019-12-04 19:51:44 +00:00
class RetryAdapter(requests.adapters.HTTPAdapter):
"""
2019-12-04 19:51:44 +00:00
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)
2019-12-04 19:51:44 +00:00
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))
2019-12-04 19:51:44 +00:00
return super(RetryAdapter, self).send(
request, stream=stream, timeout=timeout,
verify=verify, cert=cert, proxies=proxies
)
2019-12-04 19:51:44 +00:00
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)'
)