Search code examples
pythonpython-3.xpython-requests

HTTP requests.post timeout


In my code below, I use requests.post. What are the possibilities to simply continue if the site is down?

I have the following code:

def post_test():

    import requests

    url = 'http://example.com:8000/submit'
    payload = {'data1': 1, 'data2': 2}
    try:
        r = requests.post(url, data=payload)
    except:
        return   # if the requests.post fails (eg. the site is down) I want simly to return from the post_test(). Currenly it hangs up in the requests.post without raising an error.
    if (r.text == 'stop'):
        sys.exit()  # I want to terminate the whole program if r.text = 'stop' - this works fine.

How could I make the requests.post timeout, or return from post_test() if example.com, or its /submit app is down?


Solution

  • Use the timeout parameter:

    r = requests.post(url, data=payload, timeout=1.5)
    

    Requests documentation: Timeouts

    Note: timeout is not a time limit on the entire response download; rather, an exception is raised if the server has not issued a response for timeout seconds (more precisely, if no bytes have been received on the underlying socket for timeout seconds). If no timeout is specified explicitly, requests do not time out.