HTTP request.post超时

时间:2019-02-10 18:56:04

标签: python python-3.x python-requests

由于 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.

如果exam​​ple.com或其/ submit应用程序已关闭,我该如何使request.post超时或从post_test()返回?

2 个答案:

答案 0 :(得分:7)

使用timeout参数:

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

注意:timeout不是整个响应下载的时间限制;   相反,如果服务器未发出响应,则会引发异常   持续timeout秒(如果在   基础套接字timeout秒。如果未指定超时   明确地,请求不会超时。

答案 1 :(得分:3)

所有请求均带有超时关键字参数。 1

requests.post简化了将其参数转发到requests.request 2

应用程序关闭时,ConnectionErrorTimeout更有可能出现。 3

try:
    requests.post(url, data=payload, timeout=5)
except requests.Timeout:
    # back off and retry
    pass
except requests.ConnectionError:
    pass