尝试10次的问题
yeahx opened this issue · comments
为什么不用requests的HTTPAdapter,非要自己去实现一个wrapper去尝试10次。。
def do_ten_times_til_true(func):
def _do_ten_times_til_true(*args, **kwargs):
ret = False
for i in range(10):
try:
ret = func(*args, **kwargs)
except Exception as e:
ret = False
print(str(e))
if ret:
break
return ret
return _do_ten_times_til_true
HTTPAdapter
>>> import requests
>>> s = requests.Session()
>>> a = requests.adapters.HTTPAdapter(max_retries=3)
>>> s.mount('http://', a)
感谢提出这么好的建议,受教!
说来惭愧,最主要的原因是我对HTTPAdapter并不熟悉,虽然知道有max_retries,但是之前并没有用过。
再者就是需要处理非200的情况,我的程序在测试阶段的时候是经过proxychains访问的google webstore,有时会出现301和401两种情况。一个是代理访问的时候会经常出现的问题,暂时不知道如何解决;另一个是部分请求会要求登录,这个出现的概率不多。而且我无法确定经过proxychains之后,max_retries的可行性,所以最终没有使用这个方案。
这wrapper确实不算优雅,我的想法里最好的方法应该是,定义一个类继承HTTPAdapter,然后重写HTTPAdapter.send函数,以时间而不是以次数为重新请求的标准。这是我心中比较优雅的实现。
只是我当时急于拿到数据来验证我们插件探针的想法,而不是写一个工具。click还是后来我抽时间加上去的。写的时候,把更多的时间用来对付webstore和crx包的特殊情况了。
确实在很多地方没做好,如果有时间会重新实现这一块的内容。也很欢迎pull requests~
其实是过来膜拜的~ 无意间发现这个的,当时也没考虑过非200的情况_(:з」∠)_
ysrc一股清流,期待你们更多的开源程序!