python请求:我可以连续使用s.mount()吗?

时间:2016-07-14 09:12:22

标签: python python-requests

我有一段代码可以对网站提出很多请求,因此我在某些间歇性故障的情况下实现了某种重试逻辑。我还需要使用不同的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()不起作用,我怎么能这样做?

1 个答案:

答案 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。是的,我迟到了,但有人可能像我一样谷歌这个问题。