我正在连接到API流.此连接始终处于活动状态,并且我从此API接收数据.我的问题是,有时连接关闭,我需要再次连接,但我的代码没有为这个关闭的连接打开任何异常.就好像连接仍然处于活动状态,但没有接收到任何数据.我如何知道连接何时断开?

我的代码是:

try:
    response = requests.get(url, stream=True)

    response.raise_for_status()

    for line in response.iter_lines():
        if line:
            print(line)
        else:
          print("No data returned.")

except requests.exceptions.RequestException as e:
    print("Error connection:", e)

推荐答案

我通过API文档发现,如果我在URL中传递一个名为‘Heartbeats’的额外参数,则每隔10秒就会发送一个心跳事件来测试连接.所以我在API调用中传递了一个超时值为20秒,如果连接中断,在20秒后我有一个异常,在此期间我使用它来try 重新连接.

http = requests.Session()

while True:
    try:
        resp = http.get(url, stream=True, timeout=20)
        if resp.status_code == 200:
            # Do things

     except Exception as error:
        logging.info(f'Error: {error}')

Python相关问答推荐

如何随着收件箱的增加动态添加到HTML表的右下角?

为什么Pydantic在我申报邮箱时说邮箱丢失

将列中的滚动值集转换为单元格中的单个值

获取Azure Pipelines以从pyproject.toml(而不是relevments_dev.文本)安装测试环境

机器人与Pyton Minecraft服务器状态不和

基本链合同的地址是如何计算的?

无法使用python.h文件; Python嵌入错误

三个给定的坐标可以是矩形的点吗

numba jitClass,记录类型为字符串

'discord.ext. commanders.cog没有属性监听器'

如何访问所有文件,例如环境变量

如何使用数组的最小条目拆分数组

如何将多进程池声明为变量并将其导入到另一个Python文件

Python—从np.array中 Select 复杂的列子集

如何在表中添加重复的列?

Python逻辑操作作为Pandas中的条件

为什么if2/if3会提供两种不同的输出?

如何防止Pandas将索引标为周期?

如何使用使用来自其他列的值的公式更新一个rabrame列?

在代码执行后关闭ChromeDriver窗口