Unexpected EOF 远程主机强迫关闭了一个现有的连接 如何处理

前端之家收集整理的这篇文章主要介绍了Unexpected EOF 远程主机强迫关闭了一个现有的连接 如何处理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

由于数据量的增大,调用接口的次数增加

当连续向目标网站发送多次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  # 返回响应结果

版权申明:本文为博主原创文章,转载请保留原文链接及作者。

猜你在找的算法相关文章