HTTP requests.post timeout
Question:
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?
Answers:
Use the timeout
parameter:
r = requests.post(url, data=payload, timeout=1.5)
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.
All requests take a timeout keyword argument. 1
The requests.post
is simply forwarding its arguments to requests.request
2
When the app is down, a ConnectionError
is more likely than a Timeout
. 3
try:
requests.post(url, data=payload, timeout=5)
except requests.Timeout:
# back off and retry
pass
except requests.ConnectionError:
pass
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?
Use the timeout
parameter:
r = requests.post(url, data=payload, timeout=1.5)
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
fortimeout
seconds (more precisely, if no bytes have been received on
the underlying socket fortimeout
seconds). If no timeout is specified
explicitly, requests do not time out.
All requests take a timeout keyword argument. 1
The requests.post
is simply forwarding its arguments to requests.request
2
When the app is down, a ConnectionError
is more likely than a Timeout
. 3
try:
requests.post(url, data=payload, timeout=5)
except requests.Timeout:
# back off and retry
pass
except requests.ConnectionError:
pass