Flask Api для синтаксического анализа XML-запросов на возврат ошибок

Я пишу API Python-колбу для анализа и манипулирования XML с использованием XML для диктовки. Ниже мой исходный код:

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] ОШИБКА в приложении: исключение при / [POST] 2018-04-18T13:33:38.831324305Z Traceback (последний последний вызов): 2018-04-18T13:33:38.831331225Z Файл "/usr/lib/python2.7/site-packages/flask/app.py", строка 1982, в wsgi_app 2018-04-18T13:33:38.831336961Z ответ = self.full_dispatch_request() 2018-04-18T13:33:38.83134283Z Файл "/usr/lib/python2.7/site-packages/flask/app.py", строка 1614, в full_dispatch_request 2018-04-18T13:33:38.831352063Z rv = self.handle_user_exception(e) 2018-04-18T13:33:38.831357531Z Файл "/usr/lib/python2.7/site-packages/flask/app.py", строка 1517, в handle_user_exception 2018-04- 18T13: 33: 38.83136302Z
reraise (exc_type, exc_value, tb) 2018-04-18T13: 33: 38.831367481Z Файл "/usr/lib/python2.7/site-packages/flask/app.py", строка 1612, в full_dispatch_request 2018-04-18T13:33:38.831372038Z rv = self.dispatch_request() 2018-04-18T13:33:38.831377673Z Файл "/usr/lib/python2.7/site-packages/flask/app.py", строка 1598, в dispatch_request 2018-04-18T13:33:38.831385927Z return self.view_functionsrule.endpoint 2018-04-18T13:33:38.831391913Z Файл "/src/simpleapp.py", строка 14, в parse_xml 2018-04-18T13:33:38.831396571Z content_dict = xmltodict.parse(request.data) 2018-04-18T13:33:38.831401027Z Файл "/usr/lib/python2.7/site-packages/xmltodict.py", строка 330, в разборе 2018-04-18T13:33:38.831407166Z parser.Parse(xml_input, True) 2018-04-18T13:33:38.831412259Z ExpatError: элемент не найден: строка 1, столбец 0 2018-04-18T13:33:38.831705887Z 100.96.2.171 - - [18 апреля /2018 13:33:38] "POST / HTTP/1.1" 500 -

Любая помощь будет оценена, спасибо.

2 ответа

Вы должны изменить свой запрос 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"
  }
}

Вы также можете использовать curl для post Содержимое файла XML:

curl -X POST -d @data.xml  -H 'Accept: application/xml'  -H 'Content-Type: application/xml' url

data.xml содержание:

<xml>
 <From>Jack</From>
 <Body>Hello, it worked!</Body>
</xml>
Другие вопросы по тегам