ConnectTimeout 和 ConnectionError 的差异

ConnectTimeout 和 ConnectionError 的差异_第1张图片

随着网络请求库的不断发展和更新,开发者们在使用不同版本的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库进行网络请求时,不同版本之间可能会出现一些差异和问题。

你可能感兴趣的:(python,开发语言)