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

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

membalas semua(2)
迷茫

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

大家讲道理

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!