【发布时间】:2018-04-15 01:00:58
【问题描述】:
我应该向我们的 rest url 提出一个 get 请求,这会触发服务器上的一些活动并最终返回一个响应。返回响应可能需要 30 分钟以上。我知道请求没有默认超时。但是,当我提出一个获取请求并且 30 分钟后即使服务器发回响应,请求也没有返回。我确认服务器从日志文件发送了响应。我什至尝试使用请求会话,以便我的连接保持有效。它的行为仍然相同。我正在使用requests v.2.13.0. 是版本问题还是请求问题。如果请求有问题,我如何提出等待服务器发回响应的获取请求?代码很简单,我要添加以供参考。
import requests
url="www.abcd/efg/hijkl"
response=requests.get(url) #It hangs at this point even if server sends back response.
我已经使用邮递员和谷歌浏览器进行了相同的测试,两者都能够在 30 分钟后得到响应。通过将请求更新为2.18.4 也尝试了相同的问题。
编辑 1:
如果从服务器向 localhost 发出请求,则相同的代码可以正常工作。根据@randomir 的建议,network connection might getting dropped inbetween 似乎有问题,但是如何从客户端处理这个问题,因为很难实现任何服务器端方法。
【问题讨论】:
-
"... even if server sends back response."你怎么知道它有作用? -
我用我的服务器日志文件确认了这一点。我想我已经在我的问题中添加了这一点。
-
唯一可靠的方法是让应用程序级保持活动状态(服务器每隔 n 秒向客户端写一些内容),并在客户端使用读取超时。您的连接可能会在网络层断开。您可以尝试设置 TCP keep-alive。
标签: python python-2.7 python-3.x python-requests