我正在寻找一个python SOAP 1.2客户端,但似乎它不存在。所有现有客户端都未维护或仅与SOAP 1.1兼容:
答案 0 :(得分:11)
即使这个问题有一个公认的答案,但我还是有一些关于肥皂水的说明。
我目前正在编写一些与.tel社区托管工作接口的代码,我需要一个Python SOAP库,除了缺乏对SOAP 1.2的支持外,suds非常理想。
我设法解决问题,就我的目的而言,SOAP 1.1和SOAP 1.2共享足够共同,我能够简单地修补suds以使用SOAP 1.2信封命名空间。我概述了我在这个要点中做了些什么:https://gist.github.com/858851
这里值得再现,这是代码:
from suds.client import Client
from suds.bindings import binding
import logging
USERNAME = 'username'
PASSWORD = 'password'
# Just for debugging purposes.
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
# Telnic's SOAP server expects a SOAP 1.2 envelope, not a SOAP 1.1 envelope
# and will complain if this hack isn't done.
binding.envns = ('SOAP-ENV', 'http://www.w3.org/2003/05/soap-envelope')
client = Client('client.wsdl',
username=USERNAME,
password=PASSWORD,
headers={'Content-Type': 'application/soap+xml'})
# This will now work just fine.
client.service.someRandomMethod()
如果我有时间,我计划提交一个suds补丁,以允许指定SOAP版本,并添加足够的缺失功能以使其有用。
答案 1 :(得分:9)
zeep库支持SOAP 1.1和1.2,只要服务的WSDL正确指示它。
WSF / Python支持SOAP 1.2。
引言
WSF / Python是WSO2 WSF / C的Python语言扩展 [http://www.wso2.org/projects/wsf/c]。 这个版本使您能够 消费/提供Web服务 REST和SOAP。
- 支持REST
- 支持SOAP 1.1
- 支持SOAP 1.2
对于downloading,您无需注册。只需点击最底部的“提交”即可。
可以在下载的档案中找到样本,例如:
LOG_DIR = '/tmp/'
LOG_LEVEL = 4
WSFC_HOME = '/opt/wso2/wsf_c'
END_POINT = 'http://localhost:9090/axis2/services/echo/echoString'
if __name__ == '__main__':
message = """
<ns1:echoString xmlns:ns1="http://ws.apache.org/axis2/services/echo">
<text>Hello World!</text>
</ns1:echoString>
"""
try:
client = wso2.wsf.WSClient({
'to':END_POINT,
'WSF_LOG_DIR':LOG_DIR,
'WSF_LOG_LEVEL':LOG_LEVEL,
'WSFC_HOME':WSFC_HOME,
})
print 'Sending: ' + message
response = client.request(message)
if response is not None:
print 'Respose: ' + response + '\n'
else:
print 'Error occurred!'
except wso2.wsf.WSFault, e:
print 'Exception occurred:'
print e
答案 2 :(得分:5)
如果您真的想要使用SOAP 1.2,即使它尚未用作标准,我认为我可以发布一个需要一些工作的答案(所有这些都是为了更好的:)
)。
我建议您使用 gSOAP :
gSOAP - 一个易于使用的跨平台 用于C / C ++爱好者开发的工具包 基于XML的Web服务和XML 解析器。虽然它是众所周知的 一个Web服务开发工具包和 已被证明其良好的表现, 它也可以用来创建 高性能XML解析器, XML中的序列化器和反序列化器 模式或C / C ++结构/类。我的 实验结果表明 使用gSOAP生成的XML解析器 工具包的运行速度要快几倍 DOM或SAX中的xerces -c解析器 模式。
现在,我希望这很容易。由于gSOAP是一个C ++库,因此您必须将其包装起来才能在Python中使用它。
包装库的一种方法是使用名为 SWIG (简化包装器和接口生成器)的工具。该工具自动包装C / C ++库以用于高级语言,例如(你猜对了)Python。
我还建议你阅读this PDF file (from page 14)关于用C ++实现gSOAP的内容。这非常有帮助。
使用此解决方案,您可以使用经过良好检查的库,SOAP 1.2和非常好的性能比。我想你会对结果感到满意。
答案 3 :(得分:1)
几年前我遇到了类似的问题,我用Jython解决了这个问题。
如果没有针对Python的SOAP 1.2的现有实现,您可能会对Jython感兴趣,它将您与Java平台无缝集成。这意味着,您可以使用任何现有的SOAP 1.2 Java classes并将其导入您的Jython程序。您的Jython程序只是您的Python程序,但您可以导入Java类。
Jython本身包含了标准Python编程语言发行版中的几乎所有模块,但请确保您的程序不使用任何特殊的非标准Python库。
实施例: 比方说,你已经安装了Jython(它是免费的和开源的),你的Python程序叫做myprog.py,你想使用Java类CLASSNAME:
1)导入所需的Java类,将import CLASSNAME
插入myprog.py中
2)运行jython myprog.py