Phi*_*nes 7 python python-3.x python-requests
POST使用requests软件包发送请求时,如何实现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))
Run Code Online (Sandbox Code Playgroud)
Dhi*_*aTN 15
您可以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, status_forcelist=(500, 502, 503, 504)):
session = session or requests.Session()
retry = Retry(
total=retries,
read=retries,
connect=retries,
backoff_factor=backoff_factor,
status_forcelist=status_forcelist,
)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
return session
Run Code Online (Sandbox Code Playgroud)
用法:
session = retry_session(retries=5)
session.post(url=endpoint, data=json.dumps(x), headers=headers)
Run Code Online (Sandbox Code Playgroud)
注意:您还可以从Retry类继承并自定义重试行为和重试间隔.
我发现重试的默认行为不适用于 POST。为此需要添加method_whitelist,例如下面:
def retry_session(retries=5):
session = Session()
retries = Retry(total=retries,
backoff_factor=0.1,
status_forcelist=[500, 502, 503, 504],
method_whitelist=frozenset(['GET', 'POST']))
session.mount('https://', HTTPAdapter(max_retries=retries))
session.mount('http://', HTTPAdapter(max_retries=retries))
return session
Run Code Online (Sandbox Code Playgroud)