java - python使用httplib库如何实现请求失败重试机制?
高洛峰
高洛峰 2017-04-18 09:58:30
0
2
381
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(2)
迷茫

Dieu merci, je viens de trouver la solution

Un résumé de quelques techniques d'utilisation des robots d'exploration Python pour explorer des sites Web - Python - Bole Online http://python.jobbole.com/81997/ Le texte original est ici

def request(url, cookie='xxx', retries=5):
    ret = urlparse.urlparse(url)  # Parse input URL
    if ret.scheme == 'http':
        conn = httplib.HTTPConnection(ret.netloc)
    elif ret.scheme == 'https':
        conn = httplib.HTTPSConnection(ret.netloc)

    url = ret.path
    if ret.query: url += '?' + ret.query
    if ret.fragment: url += '#' + ret.fragment
    if not url: url = '/'

    try:
        conn.request(method='GET', url=url, headers={'Cookie': cookie})
        res = conn.getresponse()
    except Exception, e:
        print e.message
        if retries > 0:
            return request(url=url, retries= retries - 1)
        else:
            print 'GET Failed'
            return ''
    else:
        pass
    finally:
        pass

    if res.status != 200:
        return None
    return res.read()

Le principe est d'utiliser une variable de tentatives pour stocker le nombre de tentatives, puis de se récurer et de définir le nombre de tentatives par -1 à chaque fois qu'une exception est gérée s'il est jugé que le nombre de tentatives est inférieur à. 0, revenez directement et imprimez un journal des échecs

大家讲道理

S'appeler récursivement pour effectuer un nombre de tentatives limité est la méthode la plus directe.
Mais il y a un problème :
Si l'adresse de l'autre partie échoue seulement temporairement, comme le redémarrage du service. La nouvelle tentative immédiate a toujours échoué. Le temps nécessaire pour réessayer 5 fois était très court. Lorsque le service de l'autre partie était prêt, la demande a été acceptée car elle a été réessayée 5 fois

.

Le mécanisme que j'utilise consiste à réessayer cinq fois, en attendant 30 secondes, 1 minute, 10 minutes, 30 minutes et 1 heure. S'il échoue toujours, il est considéré comme ayant échoué.
Bien entendu, cette utilisation repose sur une logique métier spécifique. Différents besoins commerciaux ont des exigences différentes en matière de demandes.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!