Rumah  >  Soal Jawab  >  teks badan

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

高洛峰高洛峰2717 hari yang lalu393

membalas semua(2)saya akan balas

  • 迷茫

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

    Alhamdulillah saya baru jumpa penyelesaiannya

    Ringkasan beberapa teknik untuk menggunakan perangkak python untuk merangkak tapak web - Python - Bole Online http://python.jobbole.com/81997/ Teks asal ada di sini

    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()
    

    Prinsipnya ialah menggunakan pembolehubah cuba semula untuk menyimpan bilangan percubaan semula, dan kemudian mengulangi sendiri dan menetapkan bilangan percubaan semula sebanyak -1 setiap kali pengecualian dikendalikan Jika dinilai bahawa bilangan percubaan semula adalah kurang daripada 0, kembali terus dan cetak log kegagalan

    balas
    0
  • 大家讲道理

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

    Memanggil dirinya sendiri secara rekursif untuk melakukan kiraan cuba semula untuk menghadkan ialah kaedah yang paling langsung.
    Tetapi terdapat masalah:
    Jika alamat pihak lain hanya gagal buat sementara waktu, seperti memulakan semula perkhidmatan. Mencuba semula serta-merta masih gagal Masa untuk mencuba semula 5 kali adalah sangat singkat Apabila perkhidmatan pihak lain telah siap, permintaan itu diluluskan kerana ia telah dicuba semula 5 kali

    .

    Mekanisme yang saya gunakan ialah mencuba semula lima kali, menunggu selama 30s, 1 minit, 10 minit, 30 minit, dan 1 jam Jika masih gagal, ia dikira gagal.
    Sudah tentu, penggunaan ini berdasarkan logik perniagaan tertentu. Keperluan perniagaan yang berbeza mempunyai keperluan yang berbeza untuk permintaan.

    balas
    0
  • Batalbalas