如何让python .post()请求重试?

19 python urllib3 python-requests

我正在尝试在Python中实现请求重试.
它与.get()请求的魅力相似,但.post()无论状态代码如何,请求都不会重试.我想将它与.post()请求一起使用.

我的代码:

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

s = Session()
s.mount('http://', HTTPAdapter(max_retries=Retry(total=2, backoff_factor=1, status_forcelist=[ 500, 502, 503, 504, 521])))
r = s.get('http://httpstat.us/500')
r2 = s.post('http://httpstat.us/500')
Run Code Online (Sandbox Code Playgroud)

因此,.get()请求会重试,而请求.post()则不会.

怎么了?

Sta*_*lin 26

POST默认情况下,urllib3 不允许作为重试方法(因为它可能导致多次插入).你可以强迫它:

Retry(total=3, method_whitelist=frozenset(['GET', 'POST']))
Run Code Online (Sandbox Code Playgroud)

请参阅https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html#urllib3.util.retry.Retry