首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >请求重试:是否使用相同的代理

请求重试:是否使用相同的代理
EN

Stack Overflow用户
提问于 2019-01-05 06:25:31
回答 1查看 165关注 0票数 0

在使用Requests库时,我不断看到与此类似的添加重试的示例。然而,我不确定请求是否会在每次重试时执行choice(my_proxy_list),从而获得一个新的代理,或者只是继续使用用于初始请求的相同参数进行重试。

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-05 06:53:59

函数参数只计算一次,无论该函数稍后执行什么操作(包括该函数可能在内部使用的任何重试逻辑),因此在您的示例中,random.choice将只被调用一次。

如果您希望每次都有不同的代理(机会),最好的选择是执行自己的重试逻辑,每次都会调用random.choice。为了保证每次都有不同的代理,您可以在开始时打乱可能的代理列表,然后遍历它。

或者,也可以通过一个__getitem__proxies传入一个类似字典的对象,每次返回一个随机代理,但不推荐使用这种方法,因为它非常脆弱,并且严重依赖于session.get的实现细节。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54046996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档