Maison  >  Questions et réponses  >  le corps du texte

java - python使用httplib库如何实现请求失败重试机制?

高洛峰高洛峰2717 Il y a quelques jours384

répondre à tous(2)je répondrai

  • 迷茫

    迷茫2017-04-18 10:00:30

    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

    répondre
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:00:30

    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.

    répondre
    0
  • Annulerrépondre