【问题标题】:Library retry option in pycurlpycurl 中的库重试选项
【发布时间】:2020-04-23 19:28:24
【问题描述】:

我可以在 Pycurl 中设置重试选项吗?我想专门针对 DNS 解析失败重试。如果可能的话,我不希望自己重试。

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

Curl manpage 有关于 --retry 选项的详细信息。但我在 curl API 文档中没有看到等效的 setopt。这就是 Pycurl 中没有重试选项的原因吗?

我查看了this 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

【问题讨论】:

    标签: python curl pycurl


    【解决方案1】:

    pycurl 不提供重试功能。

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

    如果您以可以重试整个操作的方式调用 pycurl,则可以在您的应用程序中重试。

    【讨论】:

    • 这个论点也适用于curl,不是吗?根据此 SO 链接,curl 可用于流式上传数据:stackoverflow.com/a/31063794/630866
    • curl 是一个程序。 libcurl 是图书馆。 curl,作为程序,可以重试一切。 libcurl 不能。还要记住,phps libcurl` 绑定被称为curl,这与curl-the-program 不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 2014-03-24
    • 2013-12-16
    相关资源
    最近更新 更多