我正在尝试使用Python Flask创建一个REST API,该API通过POST接收XML文件。 我希望该API读取XML的内容,并查找一个参数/键(“目录”),以决定将其发送到何处,就像切换到其他Web应用程序一样。
主要问题是,在使用Flask request.data或request.form时,我不断收到500个错误-根据其他类似文章,这些方法之一应与XML一起使用。
常见的500错误解释是“ TypeError:视图函数未返回有效响应。该函数返回None或在没有return语句的情况下结束。”
我尝试了基于其他StackOverflow线程的命令行cURL请求来一次发送一个XML,但是与我编写的发送XML(使用请求库)的客户端python程序相比没有什么区别。
if(string.includes('%20')) { const arr = str.split('%20'); }
div
很高兴在需要时提供额外的信息。
答案 0 :(得分:0)
发生错误是因为视图未返回有效响应。
如果成功处理了请求,则未指定响应,因此该函数将返回None
,这不是有效的响应。
如果请求未成功处理,该函数将返回整数400,这也不是有效的响应。
对于一个API来说,仅返回一个HTTP状态代码就足够了,因此该函数可以返回一个空字符串以获取成功-这将导致200 OK
响应-或一个空字符串和状态码来表示不成功要求。您可以了解有关烧瓶响应here的更多信息。
此代码应该有效:
@app.route("/XMLhandling", methods=["POST"])
def handleXML():
#for debugging..
if True:
print("HEADERS", request.headers)
print("REQ_path", request.path)
print("ARGS", request.args)
print("DATA", request.data)
print("FORM",request.form)
#parse the XML
datacache = xmltodict.parse(request.form)
print(datacache)
print(datacache['xml']['Directory'])
if datacache['xml']['Directory'] == "Directory 1":
requests.post("http://localhost:25565/XML",data = xml)
elif datacache['xml']['Directory'] == "Directory 2":
requests.post("http://localhost:50001/XML",data = xml)
else:
# Return empty response body and status code.
return '', 400
# Return empty body (Flask will default to 200 status code)
return ''