我需要实现一个小型测试实用程序,它消耗极其简单的SOAP XML(HTTP POST)消息。这是我必须支持的协议,并不是我的设计决定使用SOAP(只是试图阻止那些“你为什么使用协议X?”答案)
我想使用已经在基本的python 2.6.x安装中的东西。最简单的方法是什么?唯一的SOAP消息非常简单,如果可能的话,我宁愿不使用像WSDL类生成这样的任何企业工具。
我之前在Ruby中使用普通的HTTPServlet :: AbstractServlet和REXML解析器实现了相同的功能。工作得很好。
我认为我可以使用BaseHTTPServer,BaseHTTPRequestHandler和elementree解析器在Python中使用类似的解决方案,但对于我如何阅读传入的SOAP POST消息的内容并不明显。文档不是那么好的恕我直言。
答案 0 :(得分:3)
您可以编写WSGI函数(请参阅wsgiref
)并使用xml.etree.ElementTree
模块在其中解析HTTP请求正文。
SOAP基本上非常简单,我不确定它是否值得一个特殊的模块。只需使用您喜欢的标准XML处理库。
答案 1 :(得分:1)
我在Boo中使用.Net HTTPListener编写了类似的东西,因为我也必须实现别人定义的WSDL。
我给出的WSDL使用了document / literal形式(如果你的WSDL使用rpc / encoded,你需要对这些信息做一些调整)。我将HTTPListener包装在一个类中,该类允许客户端代码通过SOAP操作注册回调,然后为该类提供一个启动HTTPListener的Start方法。您应该可以在Python中执行非常类似的操作,在BaseHTTPServer上使用getPOST()方法:
然后你只需要为每个SOAP操作实现一个回调,它获取传递给它的XML内容,用elementtree解析它,执行所需的操作(如果这是测试人员,则执行模拟操作),并构造必要的响应XML(我是不太自豪只是使用字符串插值显式创建它,但您可以使用elementtree通过序列化Python响应对象来创建它。)
如果您可以获得一些真正的SOAP示例消息以帮助您不撕掉头发,这将有所帮助,尤其是在您创建必要的响应XML的部分。