美文网首页
requests上传文件不能用@retry注解

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

作者: RedB | 来源:发表于2020-11-24 16:27 被阅读0次

最近在用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)))

相关文章

网友评论

      本文标题:requests上传文件不能用@retry注解

      本文链接:https://www.haomeiwen.com/subject/mfgciktx.html