【问题标题】:Python requests.get(url, timeout=75) does not wait for specified timeoutPython requests.get(url, timeout=75) 不等待指定的超时
【发布时间】:2017-03-18 04:49:29
【问题描述】:
requests.get("http://172.19.235.178", timeout=75) 

是我的一段代码。

它正在尝试在电话的 url 上执行获取请求,并且应该等待最多 75 秒以返回 200OK。

此请求在一台 Ubuntu 机器上完美运行,但在另一台机器上不等待 75 秒。

【问题讨论】:

  • 它做了什么?它会等待更长的 75 秒吗?
  • 它在 10-15 秒内超时
  • 是否返回预期结果?
  • no.. 基本上我在检查手机是否开机。如果它在 75 秒后没有返回响应,我有我的逻辑来处理并说电话已关闭。但是一台一台主机,请求不会等到 75 秒。我可能需要设置任何环境变量吗?

标签: python timeout python-requests


【解决方案1】:

根据https://2.python-requests.org/en/master/user/advanced/#timeouts 上的文档,您可以在请求连接部分设置超时,但您遇到的超时是与操作系统相关的套接字超时。

请注意,如果您这样做:

requests.get("http://172.19.235.178", timeout=1)

你得到:

ConnectTimeout:HTTPConnectionPool(host='172.19.235.178', port=80): url 超出最大重试次数:/(由 ConnectTimeoutError(, '连接到 172.19.235.178 超时。(connect 超时=1)'))

当你这样做时

requests.get("http://172.19.235.178", timeout=75)

你得到:

ConnectionError:HTTPConnectionPool(host='172.19.235.178', port=80): Max url 超出重试次数:/(由 NewConnectionError(': 建立新连接失败: [Errno 10060] 连接尝试失败,因为连接方没有 一段时间后正确响应,或建立连接 失败,因为连接的主机没有响应',))

虽然您可以按照此处所述更改操作系统行为:http://willbryant.net/overriding_the_default_linux_kernel_20_second_tcp_socket_connect_timeout

在您的情况下,我会将超时设置为 10 并使用 try except 语句对其进行多次迭代

【讨论】:

    猜你喜欢
    • 2019-02-22
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2011-01-07
    相关资源
    最近更新 更多