gpt4 book ai didi

python - 在 flask 请求中发送 flask 请求

转载 作者:太空狗 更新时间:2023-10-30 01:08:15 25 4
gpt4 key购买 nike

我正在我的 Flask 应用程序中实现一个端点,它接收一组 HTTP 请求,并返回一组相应的 HTTP 响应。为了实现这一点,我需要我的端点调用其他端点以构建结果。但是,由于 Flask 在处理原始请求时处于阻塞状态,因此无法处理嵌套请求,导致应用程序陷入死锁。

有没有什么方法可以在不导致死锁的情况下在 Flask 的请求中发出请求?

我包含了我的一段代码,我相信这应该足以说明问题而不会让你不知所措。如果您想查看更多内容,请告诉我,我会与您分享。

from requests import Session, Request

def split(request):
multipart = request.stream.read()
boundary = request.content_type.split(';')[1]
prefix = ' boundary"'
suffix = '"'
delimiter = '--%s' % boundary[len(prefix)+1:-len(suffix)]
subrequests = [s.lstrip() for s in multipart.split(delimiter)]
for sub in subrequests:
status_line, _, more_lines = sub.partition('\n')
method, path, version = status_line.split()
headers, _, body = more_lines.partition('\n\n')
url = 'http://localhost:3000' + path
return Request(method, url, headers=headers, data=body)

@app.route('/batch', methods=["GET", "POST"])
def batch():
subrequests = split(request)
session = Session()
responses = []
for sub in subrequests:
response.append(s.send(sub.prepare())) # Deadlock!

有两个我认为不令人满意的候选解决方案:

  1. 不要发出完整的请求。相反,只需调用映射到感兴趣的端点 (url_for) 的函数。我对这种方法不满意,因为嵌套请求有自己的 header 和 cookie,这种方法忽略了这些。此外,不会自动调用“before_request”和“after_request”处理程序中的代码

  2. 运行应用程序的多个实例。这将解决问题,但会将我的服务暴露给非常简单的 DoS 攻击。如果我有 X 个实例在运行,攻击者需要做的就是用 X 个不同的请求攻击我的服务,从而导致死锁。

谢谢。

最佳答案

知道内部 flask server 不是生产就绪的,当仅用于开发时,将 threaded=true 参数传递给 app.run。

app.run(debug=True, threaded=True)

关于python - 在 flask 请求中发送 flask 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24011629/

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