zoukankan      html  css  js  c++  java
  • 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  # 返回响应结果
    

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

  • 相关阅读:
    cmd 命令添加防火墙端口
    linux 远程 telnet
    topshelf 服务启动运行
    postfix 邮箱服务器- SPF 防发件人欺骗
    linux 只查看目录下文件夹
    Android中的颜色设置
    thread和runnable
    Handler总结
    Failed to install Intel HAXM.
    Android Studio常见问题总结
  • 原文地址:https://www.cnblogs.com/df888/p/11743072.html
Copyright © 2011-2022 走看看