首页 > 解决方案 > 重试 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 错误。

如果我在这里遗漏了什么,请纠正我,感谢任何帮助。

标签: pythonpython-2.7python-requests

解决方案


这基本上是代码中的拼写错误,导致重试失败机制无法正常工作。

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

错过在“http”/“https”中添加“:”。添加“:”后效果很好


推荐阅读