频繁请求报requests异常的处理
Posted df888
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了频繁请求报requests异常的处理相关的知识,希望对你有一定的参考价值。
由于数据量的增大,调用接口的次数会增加。
当连续向目标网站发送多次request后,目标网站可能会认为是,恶意攻击。
于是会抛出requests异常。
测试代码:
for i in range(200): # 连续请求200次 requests.post(p[‘url‘], headers=p[‘headers‘], json=p[‘body‘], verify=False)
在python3.6中,异常为
requests.exceptions.SSLError: HTTPSConnectionPool(host=‘‘, port=443): Max retries exceeded with url:
(Caused by SSLError(SSLError("bad handshake: SysCallError(-1, ‘Unexpected EOF‘)",),))
在python3.7中,异常为
requests.exceptions.ConnectionError: (‘Connection aborted.‘, ConnectionResetError(10054, ‘远程主机强迫关闭了一个现有的连接。‘, None, 10054, None))
尝试百度了不少方法,如time.sleep(1),response.close(),socket.setdefaulttimeout(20)。
要么无效果,要么经不起多次验证。
既然是异常,那么就try呗。
把异常捕获,重新请求一次。
在等待异常过程中,变相的time.sleep了。
按照这个思路,写代码,验证,目前来看还是相对靠谱的。
while True: # 循环 try: r = eval(expression) except (requests.exceptions.SSLError, requests.exceptions.ConnectionError) as e: if ‘bad handshake‘ in str(e) or ‘10054‘ in str(e): # 上述2种异常 continue # 继续发请求 else: raise Exception(e) # 其他异常,抛出来 break # 无异常就跳出循环 return r # 返回响应结果
以上是关于频繁请求报requests异常的处理的主要内容,如果未能解决你的问题,请参考以下文章
如何利用线程池解决调用第三接口出现 429 too many requests问题?