• ConnectTimeout 和 ConnectionError 的差异


    随着网络请求库的不断发展和更新,开发者们在使用不同版本的requests库时,可能会遇到一些差异和问题。

    首先,让我们看看问题的具体背景。用户在使用requests库的get方法时,遇到了以下情况:

    ```python
    import requests
    requests.get('http://fake')
    ```

    在2.8.0版本中,会抛出以下错误:

    ```python
    requests.exceptions.ConnectTimeout: HTTPConnectionPool(host='fake', port=80): Max retries exceeded with url: /

    而在2.7.0版本中,会抛出以下错误:

    ```python
    requests.exceptions.ConnectionError: ('Connection aborted.', gaierror(-2, 'Name or service not known'))
    ```

    这两个错误都涉及到了网络连接问题,但它们的具体表现和错误信息有所不同。这引起了开发者们的关注,他们开始研究问题的原因和解决方案。

    针对这个问题,开发者Lukasa认为可能是urllib3库的问题,并怀疑可能是shazow/urllib3库引入的新版本引起的。他通过查看OpenStack gate的结果,发现可能是在1.10.4和1.11之间引入的。

    进一步查找后,开发者Lukasa发现问题可能是在1.12版本中引入的。新的NewConnectionError类是ConnectTimeoutError类的子类,而以前的socket.error不会进入重试块。

    开发者Lukasa认为,从requests库的角度来看,我们只需要将NewConnectionError视为不是超时,即使在底层urllib3会尝试重试。

    综上,对于这个问题的解决方案可能是将NewConnectionError视为不是超时,这样在2.8.0版本中就不会抛出ConnectTimeout错误。开发者Lukasa将对此进行进一步的调查和处理。

    总结

    在使用requests库进行网络请求时,不同版本之间可能会出现一些差异和问题。

  • 相关阅读:
    Andorid Jetpack Hilt
    写给儿子的一封信
    springboot属性注入增强(一)背景/需求
    声网 VQA:将实时互动中未知的视频画质用户主观体验变可知
    git工作常用命令
    java计算机毕业设计天津城建大学校友录管理系统源程序+mysql+系统+lw文档+远程调试
    防火墙NAT配置
    C++ Reference: Standard C++ Library reference: Containers: array: array: back
    服务管理工具systemctl
    VUE设置和清除定时器
  • 原文地址:https://blog.csdn.net/weixin_73725158/article/details/134458799