gpt4 book ai didi

python - 来自其他 IP 而不是本地主机的请求在长时间等待时没有响应

转载 作者:行者123 更新时间:2023-11-28 22:23:19 27 4
gpt4 key购买 nike

我应该向我们的 rest url 发出一个 get 请求,它会触发服务器上的一些事件并最终返回一个响应。返回响应可能需要超过 30 分钟。我知道请求没有默认超时。但是,当我提出 get 请求时,即使服务器发回响应 30 分钟后,请求也不会返回。我确认服务器从日志文件发送了响应。我什至尝试使用请求 session ,以便我的连接仍然有效。它的行为仍然相同。我正在使用 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.

我已经使用 postman 和 google chrome 进行了相同的测试,两者都能够在 30 分钟后得到响应。还通过将请求更新到 2.18.4 来尝试同样的问题。

编辑 1:

如果从服务器向本地主机发出请求,则相同的代码可以正常工作。根据@randomir 的建议,network connection might getting dropped inbetween 似乎是个问题,但是如何从客户端处理这个问题,因为它很难实现任何服务器端方法。

最佳答案

您持久的零事件网络连接可能会被中间代理、防火墙、路由器、NAT 等断开。requests.get() 永远不会发现它,因为它在被动等待用于响应。

在 TCP 层上防止这种情况的一种方法是使用 TCP keep-alive (默认情况下通常关闭)。

在 Python 中,您可以通过低级别直接配置 TCP 保活 socket.setsockopt ,但由于您已经在使用 requests,更简单的方法是通过 TCPKeepAliveAdapter可从 requests_toolbelt 获得包裹:

import requests
from requests_toolbelt.adapters.socket_options import TCPKeepAliveAdapter

url = '...'
session = requests.Session()
keep_alive = TCPKeepAliveAdapter(idle=120, count=20, interval=30)
session.mount(url, keep_alive)
session.get(url)

关于python - 来自其他 IP 而不是本地主机的请求在长时间等待时没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47076402/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com