我收到发布的数据并立即返回空200 OK
响应。之后我将处理收到的数据。我正在考虑如何使用teardown
函数执行此操作,但我没有找到如何将其传递给接收到的数据:
@app.route('/f', methods = ['POST'])
def f():
data = request.stream.read()
return ''
@app.teardown_request
def teardwon_request(exception=None):
# How to use posted data here?
Flask版本为0.10.1
我正在尝试实现Paypal IPN侦听器
https://developer.paypal.com/webapps/developer/docs/classic/ipn/gs_IPN/#overview
请注意,侦听器的HTTP 200响应发生在侦听器的IPN消息之前。
答案 0 :(得分:2)
你太复杂了;只需在请求处理程序中从Flask服务器发送请求。 Paypal IPN通知只需要空200响应,Paypal 不要求你发送200 OK 之前你可以将HTTP请求发送到他们的服务器。
概述页面确实令人困惑,但发布的PHP代码不会关闭请求,直到Paypal IPN回发到他们的服务器的邮件也已完成。
如果 是一个很难的要求(这使得设计很糟糕),你必须异步处理回Paypal的请求。您可以使用单独的线程执行此操作,例如,使用队列,推送从IPN接收的数据,并使用单独的线程轮询队列并从该线程与Paypal通信。或者您可以使用Celery来简化作业(将任务推出以异步处理)。无论哪种方式,这都可以让您提前关闭传入的请求。