如何在 Flask/Connexion 中获取原始请求负载?

How to get raw request payload in Flask/Connexion?

我需要使用 Content-Type: application/x-www-form-urlencoded 获取 POST 请求的正文 Connexion API handler. The accepted answer here 建议使用 request.get_data(),但是这总是 returns b'' 对我来说。我的猜测是 Connexion 在调用 request.get_data() 之前解析数据,这就是导致问题的原因。

在这种情况下,如何获取原始请求负载?如果没有办法直接获取它,我如何从request.form(似乎包含已解析的数据)中正确地重建它?

我不确定是否有更简单的方法,但这似乎可以解决问题:

import urllib.parse

form_data = request.form
request_data = '&'.join([k + '=' + urllib.parse.quote_plus(v) for k, v in form_data.items()])
from connexion import request

type(request.form)
# <class 'werkzeug.datastructures.ImmutableMultiDict'>
print(dict(request.form))