HTTP requests.post 超时
Posted
技术标签:
【中文标题】HTTP requests.post 超时【英文标题】:HTTP requests.post timeout 【发布时间】:2019-07-04 07:35:35 【问题描述】:在下面的代码中,我使用requests.post
。如果站点关闭,有哪些可能继续?
我有以下代码:
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.
如果 example.com 或其 /submit 应用程序关闭,我如何使 requests.post 超时或从 post_test() 返回?
【问题讨论】:
【参考方案1】:使用timeout
参数:
r = requests.post(url, data=payload, timeout=1.5)
注意:
timeout
不是整个响应下载的时间限制; 相反,如果服务器没有发出响应,则会引发异常timeout
秒(更准确地说,如果没有收到任何字节timeout
秒的底层套接字)。如果没有指定超时 明确地,请求不会超时。
【讨论】:
您是否仍然确定如果没有明确指定超时,请求不会超时。问题是我试过了,似乎它们会自动超时! 它们不是因为 Python 而超时,而是因为服务器超时,这超出了您的代码的控制范围。【参考方案2】:所有请求都带有超时关键字参数。 1
requests.post
正在简化将其参数转发给requests.request
2
当应用程序关闭时,ConnectionError
的可能性大于Timeout
。 3
try:
requests.post(url, data=payload, timeout=5)
except requests.Timeout:
# back off and retry
pass
except requests.ConnectionError:
pass
【讨论】:
以上是关于HTTP requests.post 超时的主要内容,如果未能解决你的问题,请参考以下文章