gpt4 book ai didi

python - 使用请求库的重试历史

转载 作者:行者123 更新时间:2023-12-05 03:58:27 26 4
gpt4 key购买 nike

我正在我的 Orchestrate 脚本中构建一个新的重试功能,我想知道有多少次,如果可能的话,我的请求方法在尝试连接到特定 URL 时遇到了什么错误。

现在,我需要这个用于日志目的,因为我正在处理一个消息系统,我可能需要这个“重试”信息来了解我何时以及为什么在 HTTP 请求中遇到任何类型的问题,一旦我在微服务环境中工作。

到目前为止,我调试并证明重试按预期工作(我有一个模拟的 flask 服务器用于我们使用的所有微服务),但我找不到获取“重试历史”数据的方法。

换句话说,比如我想看看某个特定的微服务是否会在第三次请求后才响应,诸如此类。

下面是我现在使用的代码:

from requests import exceptions, Session
from urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter

def open_request_session():
# Default retries configs
toggle = True #loaded from config file

session = Session()

if toggle:

# loaded from config file as
parameters = {'total': 5,
'backoff_factor': 0.0,
'http_error_to_retry': [400]}well

retries = Retry(total=parameters['total'],
backoff_factor=parameters['backoff_factor'],
status_forcelist=parameters['http_error_to_retry'],
# Do not force an exception when False
raise_on_status=False)

session.mount('http://', HTTPAdapter(max_retries=retries))
session.mount('https://', HTTPAdapter(max_retries=retries))

return session

# Request
with open_request_session() as request:
my_response = request.get(url, timeout=10)

我在 urllib3 中看到 documentation Retry 有一个 history 属性,但是当我尝试查询该属性时它是空的。

一旦软件开发不是我的最佳技能,我不知道是我做错了还是忘记了什么。

所以,我有两个问题:

  1. 有谁知道获取此历史信息的方法吗?
  2. 我如何创建测试来验证重试行为是否按预期工作? (到目前为止我只在 Debug模式下测试)

我正在使用 Python 3.6.8。

我知道我可以创建一个 while 语句来“控制”它,但我正在努力避免复杂性。这就是我来这里的原因,我正在寻找基于 Python 和社区最佳实践的替代方案。

最佳答案

有点晚了,但我自己想出了这个问题,所以我想分享我的发现。

简答:

response.raw.retries.history

会得到你正在寻找的东西。

长答案:

您无法从创建的原始 Retry 实例中获取历史记录。在幕后,urllib3 为每次尝试创建一个新的 Retry 实例。

urllib3 会在返回一个响应时存储最后一个 Retry 实例。但是,来自 requests 库的响应是 urllib3 响应的包装器。幸运的是,requests 将原始的 urllib3 响应存储在 raw 字段中。

关于python - 使用请求库的重试历史,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58002114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com