POST 烧瓶服务器 XML 来自 python

POST flask server with XML from python

我有一个 Flask 服务器,运行正在 pythonanywhere 上运行,我正在尝试编写一个 python 脚本,我可以在本地 运行 触发一个特定响应-为了讨论起见,可以说服务器时间。 关于如何编写此过程的 Flask 服务器端的文档数不胜数,但是 non/very 关于如何编写可以触发 Flask 应用程序的内容 运行 的文档很少。 我尝试以简单的 curl 命令形式发送 XML,例如

curl -X POST -d '<From>Jack</From><Body>Hello, it worked!</Body>' URL

但这似乎不起作用(有关推荐的错误 headers)。

有人可以让我知道编写一些 XML 的正确方法,可以将其发送到监听烧瓶服务器。

谢谢,

杰克

首先,我会将 -H "Content-Type: text/xml" 添加到 cURL 调用中的 header,以便服务器知道会发生什么。如果您发布服务器代码(不一定是所有内容,但至少是失败的部分)将会很有帮助。

为了调试这个我会使用

@app.before_request
def before_request():
    if True:
        print "HEADERS", request.headers
        print "REQ_path", request.path
        print "ARGS",request.args
        print "DATA",request.data
        print "FORM",request.form

这有点粗糙,但有助于了解每个请求的情况。调试时根据需要使用 if 语句打开和关闭它。

运行 您在 cURL 调用中没有 xml header 的请求将数据发送到 request.form 字典。添加 xml header 定义会导致数据出现在 request.data 中。在不知道您的服务器在哪里出现故障的情况下,以上内容至少应该为您提供如何继续的提示。

EDIT 参考下面的评论:

我会使用出色的 xmltodict 库。用这个来测试:

import xmltodict
@app.before_request
def before_request():
    print xmltodict.parse(request.data)['xml']['From']

使用此 cURL 调用:

curl -X POST -d '<xml><From>Jack</From><Body>Hello, it worked!</Body></xml>' localhost:5000 -H "Content-Type: text/xml"

'Jack' 打印出来没有问题。

请注意,此调用已根据您的问题进行了修改 - 添加了 'xml' 标记,因为 XML 需要根节点(称为 xml 是有原因的……)。如果没有此标记,您将从 xmltodict(或您选择的任何其他解析器)得到解析错误。