Timeout for python requests.get entire response Timeout for python requests.get entire response python python

Timeout for python requests.get entire response


Set the timeout parameter:

r = requests.get(w, verify=False, timeout=10) # 10 seconds

Changes in version 2.25.1

The code above will cause the call to requests.get() to timeout if the connection or delays between reads takes more than ten seconds. See: https://docs.python-requests.org/en/master/user/advanced/#timeouts


What about using eventlet? If you want to timeout the request after 10 seconds, even if data is being received, this snippet will work for you:

import requestsimport eventleteventlet.monkey_patch()with eventlet.Timeout(10):    requests.get("http://ipv4.download.thinkbroadband.com/1GB.zip", verify=False)


UPDATE: https://requests.readthedocs.io/en/master/user/advanced/#timeouts

In new version of requests:

If you specify a single value for the timeout, like this:

r = requests.get('https://github.com', timeout=5)

The timeout value will be applied to both the connect and the read timeouts. Specify a tuple if you would like to set the values separately:

r = requests.get('https://github.com', timeout=(3.05, 27))

If the remote server is very slow, you can tell Requests to wait forever for a response, by passing None as a timeout value and then retrieving a cup of coffee.

r = requests.get('https://github.com', timeout=None)

My old (probably outdated) answer (which was posted long time ago):

There are other ways to overcome this problem:

1. Use the TimeoutSauce internal class

From: https://github.com/kennethreitz/requests/issues/1928#issuecomment-35811896

import requests from requests.adapters import TimeoutSauceclass MyTimeout(TimeoutSauce):    def __init__(self, *args, **kwargs):        connect = kwargs.get('connect', 5)        read = kwargs.get('read', connect)        super(MyTimeout, self).__init__(connect=connect, read=read)requests.adapters.TimeoutSauce = MyTimeout

This code should cause us to set the read timeout as equal to theconnect timeout, which is the timeout value you pass on yourSession.get() call. (Note that I haven't actually tested this code, soit may need some quick debugging, I just wrote it straight into theGitHub window.)

2. Use a fork of requests from kevinburke: https://github.com/kevinburke/requests/tree/connect-timeout

From its documentation: https://github.com/kevinburke/requests/blob/connect-timeout/docs/user/advanced.rst

If you specify a single value for the timeout, like this:

r = requests.get('https://github.com', timeout=5)

The timeout value will be applied to both the connect and the readtimeouts. Specify a tuple if you would like to set the valuesseparately:

r = requests.get('https://github.com', timeout=(3.05, 27))

kevinburke has requested it to be merged into the main requests project, but it hasn't been accepted yet.