如何在 python 中等待特定的 http 响应

How to wait for a specific http response in python

我在等待响应 200 时遇到问题。当我执行 get 请求时,预期的资源不存在,响应为 204。 我想要做的是等待两分钟,假设每 10 秒调用一次以检查响应是否为 200。如果时间到了,我想 return 一个错误。

def waitForResourceAvailable(response):
    while response.status_code == 204:
        time.sleep(10)
        if response.status_code == 200:
            break

这很好用,但我需要一个解决方案来退出循环,以防状态码 200 未在指定时间出现。

请注意 如果在检查 while 条件时响应的值发生变化,它也会停止迭代,因此 while 中的 if 语句是不需要。

注意: 响应对象必须能够更改其值,否则它将始终相同,因为它只是一个变量而不是检查响应的函数

您可以添加带有时间值的简单if语句

def waitForResourceAvailable(response, time):
    timer = 0
    while response.status_code == 204:
        time.sleep(10)
        timer += 10
        if timer > time:
            break
        if response.status_code == 200:
            break

让它变得更好就像:

def waitForResourceAvailable(response, timeout, timewait):
    timer = 0
    while response.status_code == 204:
        time.sleep(timewait)
        timer += timewait
        if timer > timeout:
            break
        if response.status_code == 200:
            break

查看 backoff 库。您可以注释您的功能,以便在请求失败时;它将“退避”并重试。下面是一个简单的示例,但它可以扩展为更复杂的用例,例如:放弃条件、抖动、使用多个装饰器等。

@backoff.on_exception(backoff.expo,
                      (requests.exceptions.Timeout,
                       requests.exceptions.ConnectionError))
def get_url(url):
    return requests.get(url)

on_exception装饰器用于在引发指定异常时重试。这是在引发任何请求异常时使用指数退避的示例: