我编写了一个简单的 Flask 应用程序来解析 XML 请求并发送响应。但是,当我尝试解析 XML 请求时,我得到“必须使用 Request 实例作为第一个参数调用未绑定(bind)方法 get_data()(什么也没有)”。
我已经根据 https://werkzeug.palletsprojects.com/en/0.15.x/wrappers/#werkzeug.wrappers.BaseRequest.get_data 尝试了带参数的 get_data 变体'。我也在 SO 中看过类似的问题,但这对我没有帮助。
from flask import Flask, Response, Request
import xmltodict
app = Flask(__name__)
@app.route("/")
def index():
return "Hello"
@app.route("/testapp", methods = ['POST'], strict_slashes=False)
def parseRequest():
content = xmltodict.parse(Request.get_data)
print content
if __name__ == "__main__":
app.run(host='0.0.0.0')
我使用curl发送请求
curl -i -X POST "http://x.x.x.x:5000/testapp" -H "accept: application/xml" -H "Content-Type: text/xml" --data @test.xml
这是 XML 文件的内容。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...
</soapenv:Header>
<soapenv:Body>
<com:qRequest xmlns:com=http://masked1
xmlns:xcom=http://masked2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<com:Query xsi:type="xcom:DynamicNamedQuery">
<xcom:Identifier>getDetails</xcom:Identifier>
<xcom:Parameters>
<paramvalue>ABCDE</paramvalue>
</xcom:Parameters>
</com:Query>
</com:qRequest>
</soapenv:Body>
</soapenv:Envelope>
这是我得到的错误 - “TypeError: 必须使用 Request 实例作为第一个参数调用未绑定(bind)的方法 get_data()(什么也没有)”。我也尝试过将其解码为 utf8,但我不认为这是问题所在。
最佳答案
工作代码。只是在您的案例中错误地使用了类
import xmltodict
from flask import Flask, request
app = Flask(__name__)
@app.route("/")
def index():
return "Hello"
@app.route("/testapp", methods = ['POST', 'GET'], strict_slashes=False)
def parseRequest():
content = xmltodict.parse(request.get_data())
print (content)
return content
if __name__ == "__main__":
app.run(host='0.0.0.0')
关于Python Flask 应用程序无法解析 XML 请求数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57648889/