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  # 返回响应结果

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

posted @   测试开发刚哥  阅读(2974)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示