requests上传文件不能用@retry注解

2020-11-24  本文已影响0人  RedB

最近在用python做文件上传,因为设置了超时时间,因此总会有超时报错的时候。
在一开始,我使用的方案是:

import requests
from retrying import retry
@retry
def post_file(self, url, files):
    r = self.session.post(url, timeout=120, verify=False, files=files)
    r.encoding = r.apparent_encoding
    return r.text

然而用Fiddler抓包后,发现有Bug:使用@retry重试时的请求体很小,因为并不附带有文件内容,最终会导致上传失败。

于是便去查找requests库自身的文件重传方法,找到了这篇《Python Requests.post()请求失败时的retry设置》,并加以优化:

self.session = requests.Session()
# whitelist=False: 使得所有类型请求(如GET、POST等)都被重试
self.session.mount('http://', HTTPAdapter(max_retries=Retry(total=5, method_whitelist=False)))
self.session.mount('https://', HTTPAdapter(max_retries=Retry(total=5, method_whitelist=False)))
上一篇 下一篇

猜你喜欢

热点阅读