python - 在 Python 中实现请求重试

标签 python python-3.x python-requests

在使用 requests 包发送 POST 请求时,如何实现重试 5 次,间隔 10 秒。 我发现了很多关于 GET 请求的例子,只是 post 没有。

这就是我目前正在使用的,有时我会收到 503 错误。如果我收到错误的响应 HTTP 代码,我只需要实现重试。

for x in final_payload:
    post_response = requests.post(url=endpoint, data=json.dumps(x), headers=headers)

#Email me the error
if str(post_response.status_code) not in ["201","200"]:
        email(str(post_response.status_code))

最佳答案

你可以使用urllib3.util.retry模块结合 requests 有如下内容:

from urllib3.util.retry import Retry
import requests
from requests.adapters import HTTPAdapter

def retry_session(retries, session=None, backoff_factor=0.3):
    session = session or requests.Session()
    retry = Retry(
        total=retries,
        read=retries,
        connect=retries,
        backoff_factor=backoff_factor,
        method_whitelist=False,
    )
    adapter = HTTPAdapter(max_retries=retry)
    session.mount('http://', adapter)
    session.mount('https://', adapter)
    return session

用法:

session = retry_session(retries=5)
session.post(url=endpoint, data=json.dumps(x), headers=headers)

注意:您还可以继承自 Retry类并自定义重试行为和重试间隔。

关于python - 在 Python 中实现请求重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49121365/

相关文章:

python - 为继承类设置常量参数的最佳实践

python - 每 n 个字符拆分字符串但不拆分单词

Python在postgresql表中查找带有单引号的字符串

python - 从列表项的不同组合创建元素列表

python - Bitly API v4 和 Python (2.7) 请求模块出现问题,我不断收到响应代码 422 : UNPROCESSABLE_ENTITY

具有相同键的(嵌套)字典的 Pythonic 替代品?

Python设置相邻字母的组合

python - 如何使用相对路径从包内的模块内部打开文件?

python - 从简单的 get 返回 403 Forbidden 但在浏览器中加载正常

python - 我正在尝试从需要登录的网站中抓取 HTML,但没有获取任何数据