python - 请求重试:将使用相同的代理
问题描述
在使用 Requests 库时,我不断看到与此类似的示例来添加重试。但是,我不确定请求是否会choice(my_proxy_list)
在每次重试时执行,从而获得一个新的代理,或者只是继续使用与初始请求相同的参数重试。
import my_proxy_list
from random import choice
import requests
from requests.packages.urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter
session = requests.Session()
retries = Retry(total=5, backoff_factor=0.4, status_forcelist=[400, 429, 500, 502, 503, 504])
session.mount("http://", HTTPAdapter(max_retries=retries))
response = session.get(
url=url,
proxies=choice(my_proxy_list),
timeout=(10, 27),
)
session.close()
解决方案
函数参数被评估一次,无论该函数稍后会做什么(包括函数可能在内部使用的任何重试逻辑),因此random.choice
在您的示例中只会被调用一次。
如果您每次都想要一个(有机会)不同的代理,最好的选择是执行您自己的random.choice
每次调用的重试逻辑。为了保证每次都使用不同的代理,您可以在开始时打乱可能的代理列表,然后遍历它。
或者,可以传入一个类似字典的对象,proxies
每次__getitem__
都设计为返回一个随机代理,但不建议使用这种方法,因为它非常脆弱,并且会严重依赖session.get
.
推荐阅读
- python - 无法获得 new_title 动作
- java - 逆时针方向的螺旋矩阵
- python - Pands - 错误:数字列上的“没有要聚合的数字类型”
- java - 尝试匹配列表中的输入时如何生成异常
- linux - 如何安装特定版本的 libhwloc5
- powershell - 使用通配符在字符串中查找字符串 (Powershell)
- android - 如何在颤动中增加 AssetImage 中图像的大小?
- python - 将 python 与 pyinstaller 捆绑在一起,添加数据文件并使用 --onefile 标志时失败
- r - 用情节检查同方差性(汽车包)
- amazon-web-services - 如何在 S3 中解压 .gzip 文件,应用一些 sql 过滤器,并将结果作为 json 存储在 S3 中?