python - 重试 REST 调用时出现 5XX 错误 - POST 方法
问题描述
我正在尝试对 POST 方法进行一次 REST API 调用。
来自不同主机的同一端点将有大约 500 多次调用。
导致 503 错误,因此我尝试使用 requests 模块的 Retry 功能来实现重试机制。
即使在实现重试功能后仍然出现相同的错误。
代码片段如下:
import requests
requests.packages.urllib3.disable_warnings()
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
import json
s = requests.Session()
retries = Retry(total=3, backoff_factor=0.3, status_forcelist=[502, 503, 504],
method_whitelist=frozenset(['GET', 'POST']))
s.mount('https//', HTTPAdapter(max_retries=retries))
s.mount('http//', HTTPAdapter(max_retries=retries))
response = s.post(url, json=json_payload, headers=headers)
仍然收到 503 错误。
已经针对相同的问题模式查看了以前的答案,但我没有找到有关此的更多信息。
注意:这里的脚本同时从 525 个主机执行,所以大约 500 多个主机将尝试触发对 url(内部 url)的调用,所以这里 350 个主机我得到了正确的 200 响应,其他最终出现 503 错误。
如果我在这里遗漏了什么,请纠正我,感谢任何帮助。
解决方案
这基本上是代码中的拼写错误,导致重试失败机制无法正常工作。
s.mount('https://', HTTPAdapter(max_retries=retries))
s.mount('http://', HTTPAdapter(max_retries=retries))
错过在“http”/“https”中添加“:”。添加“:”后效果很好
推荐阅读
- c++ - 单击或拖动标题栏时如何防止计时器冻结?
- android-studio - android studio中的gridlayout有问题
- benchmarking - 当我安装 SPEC2006 时,它不会执行此步骤
- node.js - Odata $filter 总是返回带有节点 js 和 postgresql 的空数组
- javascript - 如何在画布上重复绘制?
- go - 来自天蓝色管道工件的自定义处理程序 defaultExecutablePath
- java - 查找两个特殊符号之间的字符数
- r - 是否有一个函数可以根据另一列的条件替换列中的特定值?
- sed - 如何使用 sed 在文件中的特定行附加数据,其中数据来自另一个文件
- xaml - UWP-CPP/Winrt 使 ListViewItem 数据模板的 Line Control 仅在选中时可见