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

如何在python中等待特定的http响应,python,response,Python,Response,我在等待回复时遇到问题。当我执行get请求时,预期的资源不在那里,响应为204。 我想做的是等待两分钟,让我们假设每10秒打一次电话,检查响应是否为200。如果超时,我想返回一个错误 def waitForResourceAvailable(response): while response.status_code == 204: time.sleep(10) if response.status_code == 200: brea

我在等待回复时遇到问题。当我执行get请求时,预期的资源不在那里,响应为204。 我想做的是等待两分钟,让我们假设每10秒打一次电话,检查响应是否为200。如果超时,我想返回一个错误

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

请注意如果在检查
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

HTTP代码204或404,甚至是50x,都是绝对正常的响应代码。你为什么期望有200个呢?您是否负责服务器应用程序?您正在尝试哪个url?
响应
已修复;它和它的任何部分都不会在您显示的代码中更改。如果需要不同的响应,则必须重复该请求。我通过REST-API运行一个命令,该命令生成一个报告。启动命令时,响应包含reportID,但尚未生成报告。因此,我下一个获取报告的命令必须等到资源可用时才执行。HTTP代码204或404,甚至50x-都是绝对正常的响应代码。你为什么期望有200个呢?您是否负责服务器应用程序?您正在尝试哪个url?
响应
已修复;它和它的任何部分都不会在您显示的代码中更改。如果需要不同的响应,则必须重复该请求。我通过REST-API运行一个命令,该命令生成一个报告。启动命令时,响应包含reportID,但尚未生成报告。因此,获取报告的下一个命令必须等待资源可用。