【问题标题】:http.client.RemoteDisconnected: Remote end closed connection without response - retries exhausted or something else?http.client.RemoteDisconnected:远程端关闭连接没有响应 - 重试耗尽或其他什么?
【发布时间】:2023-01-15 03:36:00
【问题描述】:

我有一些代码使用 requests 从 API 获取响应并将结果上传到数据库中。我已经构建了一个自定义的 Request 类,因此我可以调整 BACKOFF_MAX 变量。通过 MRE:

from requests import Session
from requests.adapters import HTTPAdapter, Retry
from time import sleep

class RetryRequest(Retry):

    def __init__(self, backoff_max: int, **kwargs):
        super().__init__(**kwargs)
        self.BACKOFF_MAX = backoff_max


session = Session()
retries_spec = RetryRequest(
    total=25,
    backoff_factor=0.25,
    backoff_max=128,
)
session.mount("https://", HTTPAdapter(max_retries=retries_spec))
headers = {"User-Agent": "*", "Referer": None}
session.headers.update(headers)

while True:
    response = session.get(<url>)
    # load response into database
    sleep(60)

这适用于循环的数百次迭代,但每隔一段时间我就会收到此错误:

http.client.RemoteDisconnected: Remote end closed connection without response

有人可以告诉我这是否是重试耗尽的结果,或者我是否需要在这里进行一些额外的错误处理?

【问题讨论】:

    标签: python python-requests


    【解决方案1】:

    在我看来,这更像是服务器端错误。 它可能由于多种原因而被触发,可能是为了应对 DDOS 攻击,这就是为什么我建议您通过 try/except 包装 get 请求,让您的进程在 except 部分休眠并重试。

    或者

    您也可以尝试设置更高的退避系数

    【讨论】:

      猜你喜欢
      • 2021-10-17
      • 1970-01-01
      • 2017-03-12
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 2022-08-16
      相关资源
      最近更新 更多