python - Flask Api 解析返回错误的 xml post 请求

标签 python xml curl flask xmltodict

我正在编写一个 python-flask api 来解析和操作 xml,使用 xml to dict。下面是我的初始代码:

from flask import Flask, jsonify, abort, make_response, request, 
render_template
import sys, sqlite3, requests, datetime, time, re, json, optparse
import xmltodict
import helpers
import platform
app = Flask(__name__)

start = int(round(time.time()))
print("api running")

@app.route("/", methods=['GET', 'POST'])
def parse_xml():
    content_dict = xmltodict.parse(request.data)
    return content_dict

if __name__ == '__main__':
    print("Starting python app")
    app.run(host='0.0.0.0', port=8080, debug=False)

以下 curl 请求:curl -H "Authorization: Bearer Token" -X POST -d '<xml><From>Jack</From><Body>Hello, it worked!</Body></xml>' url

返回错误:

2018-04-18T13:33:38.831293275Z [2018-04-18 13:33:38,830] ERROR in app: Exception on / [POST] 2018-04-18T13:33:38.831324305Z Traceback (most recent call last): 2018-04-18T13:33:38.831331225Z File "/usr/lib/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app 2018-04-18T13:33:38.831336961Z response = self.full_dispatch_request() 2018-04-18T13:33:38.83134283Z File "/usr/lib/python2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request 2018-04-18T13:33:38.831352063Z rv = self.handle_user_exception(e) 2018-04-18T13:33:38.831357531Z File "/usr/lib/python2.7/site-packages/flask/app.py", line 1517, in handle_user_exception 2018-04-18T13:33:38.83136302Z
reraise(exc_type, exc_value, tb) 2018-04-18T13:33:38.831367481Z File "/usr/lib/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request 2018-04-18T13:33:38.831372038Z rv = self.dispatch_request() 2018-04-18T13:33:38.831377673Z File "/usr/lib/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request 2018-04-18T13:33:38.831385927Z return self.view_functionsrule.endpoint 2018-04-18T13:33:38.831391913Z File "/src/simpleapp.py", line 14, in parse_xml 2018-04-18T13:33:38.831396571Z content_dict = xmltodict.parse(request.data) 2018-04-18T13:33:38.831401027Z File "/usr/lib/python2.7/site-packages/xmltodict.py", line 330, in parse 2018-04-18T13:33:38.831407166Z parser.Parse(xml_input, True) 2018-04-18T13:33:38.831412259Z ExpatError: no element found: line 1, column 0 2018-04-18T13:33:38.831705887Z 100.96.2.171 - - [18/Apr/2018 13:33:38] "POST / HTTP/1.1" 500 -

如有任何帮助,我们将不胜感激。

最佳答案

您必须将您的 curl 请求更改为键=值对以便于处理。

curl :

 curl -H "Authorization: Bearer Token" -X POST -d 'SomeKey=<xml><From>Jack</From><Body>Hello, it worked!</Body></xml>' http://127.0.0.1:5000

python :

from flask import Flask, jsonify, request
import xmltodict

app = Flask(__name__)

@app.route("/", methods=['GET', 'POST'])
def parse_xml():
    xml_data = request.form['SomeKey']
    content_dict = xmltodict.parse(xml_data)
    return jsonify(content_dict)

响应:

{
  "xml": {
      "Body": "Hello, it worked!",
      "From": "Jack"
  }
}

关于python - Flask Api 解析返回错误的 xml post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49901197/

相关文章:

python - 将 Python 连接到远程 SQL Server

java.lang.IllegalArgumentException : No SchemaFactory that implements the schema language specified 异常

xml - xsl-fo,org.apache.fop.fo.ValidationException : "fo:table-body" is missing child elements

javascript - 在 PHP 中自动填充并从其他页面检索数据

PHP cURL 文件上传

python - 在 LinearSVC 的 scikit 中计算每个样本 x 的概率估计 P(y|x)

python - 值错误 : operands could not be broadcast together with shapes (842, 474) (844,476)

php - 从 php curl 比通过 putty curl 需要更多时间

python - 将 python 脚本转换为函数

xml - 为什么XSLT不喜欢我的XPath查询?