我有一段代码可以对网站提出很多请求,因此我在某些间歇性故障的情况下实现了某种重试逻辑。我还需要使用不同的IP,所以我有这段代码:
import requests
from requests_toolbelt.adapters.source import SourceAddressAdapter
new_source = SourceAddressAdapter(ip)
adapter = requests.adapters.HTTPAdapter(max_retries = 20)
sess = requests.Session()
sess.mount('http://', adapter)
sess.mount('https://', adapter)
sess.mount('http://', new_source)
sess.mount('https://', new_source)
我想知道是否可以使用sess.mount()两次,或者如果使用它,第二次将#34;覆盖"我的第一个参数(适配器)。我需要在会话期间使用IP和重试适配器。
如果sess.mount()不起作用,我怎么能这样做?
答案 0 :(得分:2)
SourceAddressAdapter
继承自HTTPAdapter
,它还代理kwargs到HTTPAdapter.__init__()
:
class SourceAddressAdapter(HTTPAdapter):
def __init__(self, source_address, **kwargs):
### Some code ###
super(SourceAddressAdapter, self).__init__(**kwargs)
https://github.com/sigmavirus24/requests-toolbelt/blob/master/requests_toolbelt/adapters/source.py
所以你可以将它用于max_retries
kwarg:
adapter = SourceAddressAdapter(ip, max_retries=20)
P.S。是的,我迟到了,但有人可能像我一样谷歌这个问题。