SOAP 1.2 python客户端

时间:2010-03-03 11:01:20

标签: python soap

我正在寻找一个python SOAP 1.2客户端,但似乎它不存在。所有现有客户端都未维护或仅与SOAP 1.1兼容:

  • 泡沫
  • SOAPpy的
  • ZSI

4 个答案:

答案 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