首页 > 解决方案 > pycurl 中的库重试选项

问题描述

Pycurl 中是否有我可以设置的重试选项?我想专门针对 DNS 解析失败重试。如果可能的话,我不喜欢自己重试。

curl --retry 3 "www.google.com"

Curl 手册包含有关--retry选项的详细信息。但我setopt在 curl API文档中看不到等效项。这就是为什么 Pycurl 中没有重试选项的原因吗?

我看了这个SO问题。这是重试的唯一方法吗?

我目前的代码是这样的:

    c = pycurl.Curl()

    b = six.BytesIO()
    c.setopt(pycurl.WRITEFUNCTION, b.write)
    c.setopt(pycurl.URL, "www.google.com")
    c.setopt(pycurl.POST, 1)
    c.setopt(pycurl.SSL_VERIFYHOST, 2)
    c.setopt(pycurl.SSL_VERIFYPEER, 1)
    c.setopt(pycurl.VERBOSE, 1)

    retries = 3

    while retries:
        try:
            c.perform()
        except as e:
            if 'Could not resolve' in str(e):
                retries -= 1
                continue
            # log exception e and exit here

标签: pythoncurlpycurl

解决方案


pycurl 不提供重试功能。

例如,pycurl 允许指定要作为流上传的数据。如果上传失败,如何重试?一旦从流中读取数据,它就不再可用。

If you are calling pycurl in such a way that the entire operation can be retried, you can retry it in your application.


推荐阅读