requests.exceptions.RequestException can't catch urllib3.exceptions.ReadTimeoutError

I used RequestException  catch requests.get exception,But I found it can't catch ReadTimeoutError in urllib3,How can I catch exception raised by requests.get


Hi @beruhan, [a quick glance](https://github.com/requests/requests/blob/2530323faf576def7f3f5bde636962c23f4b187f/requests/adapters.py#L525-L526) suggests we should be catching this and raising a `ReadTimeout` from the requests namespace.

Would you mind providing the information originally requested with the ticket (`python -m requests.help`) and a copy of the traceback you're seeing this with? We'll need those things to help determine if we're leaking this somewhere else. Thanks!

`python -m requests.help` result is :
 `{
  "chardet": {
    "version": "3.0.4"
  },
  "cryptography": {
    "version": ""
  },
  "idna": {
    "version": "2.7"
  },
  "implementation": {
    "name": "CPython",
    "version": "3.6.4"
  },
  "platform": {
    "release": "10",
    "system": "Windows"
  },
  "pyOpenSSL": {
    "openssl_version": "",
    "version": null
  },
  "requests": {
    "version": "2.19.0"
  },
  "system_ssl": {
    "version": "100020bf"
  },
  "urllib3": {
    "version": "1.23"
  },
  "using_pyopenssl": false
}`,
traceback as follows:
```
Traceback (most recent call last):
  File "C:\Python36\lib\site-packages\urllib3\response.py", line 331, in _error_catcher
    yield
  File "C:\Python36\lib\site-packages\urllib3\response.py", line 413, in read
    data = self._fp.read(amt)
  File "C:\Python36\lib\http\client.py", line 449, in read
    n = self.readinto(b)
  File "C:\Python36\lib\http\client.py", line 493, in readinto
    n = self.fp.readinto(b)
  File "C:\Python36\lib\socket.py", line 586, in readinto
    return self._sock.recv_into(b)
socket.timeout: timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:/work/project/iot_exploit/examples/requests_test.py", line 19, in <module>
    first_len = len(req.raw.read(200))
  File "C:\Python36\lib\site-packages\urllib3\response.py", line 430, in read
    raise IncompleteRead(self._fp_bytes_read, self.length_remaining)
  File "C:\Python36\lib\contextlib.py", line 99, in __exit__
    self.gen.throw(type, value, traceback)
  File "C:\Python36\lib\site-packages\urllib3\response.py", line 336, in _error_catcher
    raise ReadTimeoutError(self._pool, None, 'Read timed out.')
urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='201.211.180.4', port=9001): Read timed out.
```
source code:
```
import requests

url = 'http://201.211.180.4:9001/cgi-bin/guest/Video.cgi?media=MJPEG&channel=1'
req = None
try:
    req = requests.get(url, stream=True, auth=('admin', 'admin'), headers={"Connection": "close"}, timeout=5,
                       verify=False)
    print(req.status_code)
    if req.status_code == 200:
        first_len = len(req.raw.read(200))
        if first_len == 200 and "image" in req.headers["content-type"]:
            print("success")
except requests.RequestException as e:
    print(e)
finally:
    if req:
        req.close()
```


@beruhan, if you look at your supplied traceback you can see the exception is raised on the `first_len = len(req.raw.read(200))` line. This is a call directly to a urllib3 object and doesn’t touch Requests in the traceback. You’ll need to either use `iter_content` or handle possible urllib3 exceptions that read may raise.