加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 04:44:06 所属栏目:百科 来源:网络整理
导读:由于数据量的增大,调用接口的次数会增加。 当连续向目标网站发送多次request后,目标网站可能会认为是,恶意攻击。 于是会抛出requests异常。 测试代码: for i in range(200): # 连续请求200次 requests.post(p['url'],headers=p['headers'],json=p['body'

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读