requests.exceptions.ReadTimeout is raised whenever how long I set the timeout ...

In my apllication, I got this exception:

```
[2017-03-15 14:45:06]: http://club.xywy.com/question/20160115/99407801.htm
Traceback (most recent call last):
  File "C:\Program Files\Python\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 386, in _make_request
    six.raise_from(e, None)
  File "<string>", line 2, in raise_from
  File "C:\Program Files\Python\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 382, in _make_request
    httplib_response = conn.getresponse()
  File "C:\Program Files\Python\lib\http\client.py", line 1331, in getresponse
    response.begin()
  File "C:\Program Files\Python\lib\http\client.py", line 297, in begin
    version, status, reason = self._read_status()
  File "C:\Program Files\Python\lib\http\client.py", line 258, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "C:\Program Files\Python\lib\socket.py", line 586, in readinto
    return self._sock.recv_into(b)
  File "C:\Program Files\Python\lib\site-packages\gevent\_socket3.py", line 385, in recv_into
    self._wait(self._read_event)
  File "C:\Program Files\Python\lib\site-packages\gevent\_socket3.py", line 157, in _wait
    self.hub.wait(watcher)
  File "C:\Program Files\Python\lib\site-packages\gevent\hub.py", line 651, in wait
    result = waiter.get()
  File "C:\Program Files\Python\lib\site-packages\gevent\hub.py", line 899, in get
    return self.hub.switch()
  File "C:\Program Files\Python\lib\site-packages\gevent\hub.py", line 630, in switch
    return RawGreenlet.switch(self)
socket.timeout: timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files\Python\lib\site-packages\requests\adapters.py", line 423, in send
    timeout=timeout
  File "C:\Program Files\Python\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 649, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "C:\Program Files\Python\lib\site-packages\requests\packages\urllib3\util\retry.py", line 347, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "C:\Program Files\Python\lib\site-packages\requests\packages\urllib3\packages\six.py", line 686, in reraise
    raise value
  File "C:\Program Files\Python\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 600, in urlopen
    chunked=chunked)
  File "C:\Program Files\Python\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 388, in _make_request
    self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
  File "C:\Program Files\Python\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 308, in _raise_timeout
    raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value)
requests.packages.urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='club.xywy.com', port=80): Read timed out. (read timeout=20)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/XYWYCrawler/consumer/UrlConsumer.py", line 29, in getQPageInfo
    html = NetworkIO().requestHtml(url)
  File "C:\Users\Administrator\Desktop\XYWYCrawler\common\IOHandler.py", line 25, in requestHtml
    resp = requests.get(url, headers=self.__headers, timeout=(5, 20))
  File "C:\Program Files\Python\lib\site-packages\requests\api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "C:\Program Files\Python\lib\site-packages\requests\api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Program Files\Python\lib\site-packages\requests\sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Program Files\Python\lib\site-packages\requests\sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "C:\Program Files\Python\lib\site-packages\requests\adapters.py", line 499, in send
    raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPConnectionPool(host='club.xywy.com', port=80): Read timed out. (read timeout=20)
```
Firstly, I thought it might be the readtimeout is too short, but whenever how long the readtimeout is ,this exception still happened, so is anybody tell me why and how to fix it?

Right now it's very unclear. Can you please answer some of the questions from the contributing guide?

What version of Requests do you have? What version of Python are you using? What other packages do you have installed? And can you provide a minimal example reproduction?

@Lukasa 
Python version: ```Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32```
Requests version:```requests (2.13.0)```
Other packages:
```
aiohttp (1.3.3)
amqp (2.1.4)
anyjson (0.3.3)
appdirs (1.4.0)
async-timeout (1.1.0)
attrs (16.3.0)
Automat (0.5.0)
billiard (3.5.0.2)
celery (3.1.24)
cffi (1.9.1)
chardet (2.3.0)
click (6.7)
colorama (0.3.7)
configobj (5.0.6)
constantly (15.1.0)
cryptography (1.7.2)
cssselect (1.0.1)
DBUtils (1.2)
decorator (4.0.11)
Django (1.10.5)
django-celery (3.2.1)
django-celery-with-redis (3.0)
gevent (1.2.1)
greenlet (0.4.12)
idna (2.2)
incremental (16.10.1)
ipython (5.2.2)
ipython-genutils (0.1.0)
kombu (4.0.2)
lxml (3.7.3)
multidict (2.1.4)
mycli (1.8.1)
packaging (16.8)
parsel (1.1.0)
pickleshare (0.7.4)
pip (9.0.1)
prompt-toolkit (1.0.13)
pyasn1 (0.2.2)
pycparser (2.17)
PyDispatcher (2.0.5)
Pygments (2.2.0)
PyMySQL (0.7.10)
pyOpenSSL (16.2.0)
pyparsing (2.1.10)
pytz (2016.10)
queuelib (1.4.2)
redis (2.10.5)
requests (2.13.0)
setuptools (34.2.0)
simplegeneric (0.8.1)
six (1.10.0)
sqlparse (0.2.2)
traitlets (4.3.1)
vine (1.1.3)
w3lib (1.17.0)
wcwidth (0.1.7)
web.py (0.40.dev0)
yarl (0.9.8)
zope.interface (4.3.3)
```

Here is my relative code: ```resp = requests.get(url, headers=self.__headers, timeout=(10, 30))```, and I also use gevent in my app.


Ok, so I'm not able to reproduce this with a simple equivalent on my end. Can you try a clean virtualenv without gevent to see if it reproduces?

@Lukasa Ok, I'll have a try.

Any updates on this @i2it? This has gone without an update for 20 days and we cannot reproduce it. Please help us to help you :)

@i2it do you use monkey patching?

Well, that's one way to solve this issue.

We've found similar issue with requests >= 2.14.0 while using gevent and monkey patching socket with `aggressive=True`. I just thought it might be interesting. Also, note that gevent is listed https://github.com/requests/requests/issues/3924#issuecomment-286674716

@zstyblik Does it reproduce without gevent?

EDIT: fixed some typos :)

@Lukasa no and we found out by accident(brainstorming and saying stupid ideas). Now, I don't know "who" exactly is to blame, but if I remember correctly, it's monkey patching and `aggresive=True`, because it applies some SSL optimizations. I believe/think/if I remember correctly, the reason for monkey patching is either to get better performance from gevent or even to make code(web app/middleware) in question to work with gevent.

Anyway, no, it's not reproducible if you just do in Python interpreter/CLI or even a script:

```
import requests
requests.get('https://localhost')
```

Also, note that HTTP was working just fine, just HTTPS had these issues.

Ok, so my inclination then is to assume that this is a gevent bug. Generally speaking if we have code that works under CPython-vanilla and breaks under gevent, the problem is with gevent and not with us. gevent's promise is that it will reproduce a CPython runtime environment with transparent green threading: seems to me it's failing to meet that promise.

@Lukasa I agree with you that problem doesn't lie in requests, but either in gevent or monkey patching.

Cheers.

I have this exact same issue and it does seem to be with gevent :(