我想在Python中使用基于WSDL SOAP的Web服务.我查看了Dive Into Python代码,但SOAPpy模块在Python 2.5下不起作用.
我已经尝试使用肥皂水其中工程部分,但与某些类型的中断(suds.TypeNotFound:类型未找到:"项目").
我也看过Client,但这似乎不支持WSDL.
我看过ZSI,但看起来很复杂.有没有人有任何示例代码?
WSDL是https://ws.pingdom.com/soap/PingdomAPI.wsdl,可以与PHP 5 SOAP客户端一起使用.
我在网上搜索了一个现有的,支持Python 3的 SOAP库.(客户端和服务器)
这里是我找到的库列表:
Python 2:
Python 3:
这个列表对你来说似乎完整吗?(仅供参考,我使用这篇文章作为起点(该帖子的目的是相同的,但对于Python 2而言))
Ladon在我看来是Python 3唯一现有的框架,但AFAIK只能用于实现服务器端.
NO:我不想自己迁移其中一个已停产的Python 2项目.我正在寻找一个受支持的项目,如果需要,我们会派出一个积极的团队提
更新于28/09/2013
我目前正在研究实现一个将使用现有广泛的SOAP管理API的客户端.
我研究了不同的SOAP实现,如pysimplesoap和SUDS.虽然第一个因为递归太多而解析WSDL时遇到问题,但是suds工作得很好(但很慢)而且我真的很喜欢模块.
但是,SUDS似乎存在一些问题,例如高内存消耗,WSDL解析速度以及缺少对某些WSDL属性的支持(例如,选择属性).
虽然有很多人积极提交错误报告和补丁,但自2010-09-15以来没有发布过SUDS.此外,维基和路线图看起来有点被忽视.
对我来说,看起来SUDS已不再维护.
所以我的问题在这里:
[2013年11月更新]
两年多过去了,事实证明原来的肥皂水泥项目真的已经死了.自2010年以来,没有进一步的版本.由于这一事实,很多人开始分支suds,而像Debian这样的发行版正在部署原始suds包的修补版本来修复一些问题.
我可以推荐Jurko积极维护的叉子,我成功使用了它.它支持python 3并解决了很多泡沫已知的问题.Bitbucket上提供了发行说明和错误跟踪器,PyPI上也提供了该程序包,因此可以使用pip进行安装.
我有一个描述Java产品上的通信服务器客户端的wsdl文件.我正在实现一个基于Python的新服务器,它将实现相同的服务.
您是否知道基于wsdl创建Python服务器代码的任何方法,这不需要我编写所涉及的所有复杂类型?
另外,你推荐什么Api?
所以我试图使用SUDS 访问这个api https://www.clarityaccounting.com/api-docs/.这是应该工作的代码:
from suds.client import Client
client = Client('https://www.clarityaccounting.com/api/v1?wsdl')
token = client.service.doLogin('demo', 'demo', 'www.kashoo.com', 'en_US', 300000)
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
WebFault: Server raised fault: 'No such operation: (HTTP GET PATH_INFO: /api/v1)'
Run Code Online (Sandbox Code Playgroud)
他们的支持人员说请求应该如下所示:
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:api="http://api.service.books/">
<SOAP-ENV:Body>
<api:doLogin>
<username>demo</username>
<password>demo</password>
<siteName>www.kashoo.com</siteName>
<locale>en_US</locale>
<duration>300000</duration>
</api:doLogin>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)
但是SUDS'看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:ns0="http://api.service.books/"
xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns1:Body>
<ns0:doLogin>
<username>demo</username>
<password>demo</password>
<siteName>www.kashoo.com</siteName>
<locale>en_US</locale>
<duration>300000</duration>
</ns0:doLogin>
</ns1:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)
我是一个真正的SOAP和SUDS新手,但我听说SUDS是从这里使用的最好的SOAP库:Python存在哪些SOAP客户端库,它们的文档在哪里?
所以我的问题是什么是不同的关键部分,使请求失败,如何配置SUDS发送格式正确的请求?
我有一个基于Twisted的项目,用于与网络设备通信,我正在添加对API为SOAP 的新供应商(Citrix NetScaler)的支持.不幸的是,Twisted中对SOAP的支持依然存在SOAPpy,这已经过时了.事实上,就这个问题(我刚检查过)而言,twisted.web.soap
本身在21个月内甚至没有更新!
我想问一下,如果有人有任何经验,他们愿意与SUDS使用Twisted的超级异步传输功能.看起来插入一个自定义的Twisted传输将是一个自然的SUDS' Client.options.transport,我只是很难缠绕我的头.
我确实想出了一种方法,通过利用异步方式使用SUDS调用SOAP方法twisted.internet.threads.deferToThread(),但这对我来说就像是一个黑客.
这是我做过的一个例子,给你一个想法:
# netscaler is a module I wrote using suds to interface with NetScaler SOAP
# Source: http://bitbucket.org/jathanism/netscaler-api/src
import netscaler
import os
import sys
from twisted.internet import reactor, defer, threads
# netscaler.API is the class that sets up the suds.client.Client object
host = 'netscaler.local'
username = password = 'nsroot'
wsdl_url = 'file://' + os.path.join(os.getcwd(), 'NSUserAdmin.wsdl')
api = netscaler.API(host, username=username, password=password, wsdl_url=wsdl_url)
results = []
errors …Run Code Online (Sandbox Code Playgroud) 虽然我过去使用过API,但这是我尝试使用的第一个SOAP.我从SOAP教程中复制,粘贴和更改了一些代码,但我已经看到它在10个不同的示例中以10种不同的方式完成,但没有一个在解释代码时非常清楚.也许以下代码不是最好的方法,但这就是为什么我正在寻找一些帮助和一个明确的方向进入.非常感谢.
import string, os, sys, httplib
server_addr = "auctions.godaddy.com"
service_action = "GdAuctionsBiddingWSAPI/GetAuctionList"
body = """
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.example.com/services/wsdl/2.0">
<soapenv:Header/>
<soapenv:Body>
<ns:serviceListRequest>
<ns:userInfo>
</ns:userInfo>
</ns:serviceListRequest>
</soapenv:Body>
</soapenv:Envelope>"""
request = httplib.HTTPConnection(server_addr)
request.putrequest("POST", service_action)
request.putheader("Accept", "application/soap+xml, application/dime, multipart/related, text/*")
request.putheader("Content-Type", "text/xml; charset=utf-8")
request.putheader("Cache-Control", "no-cache")
request.putheader("Pragma", "no-cache")
request.putheader("SOAPAction", "https://auctions.godaddy.com/gdAuctionsWSAPI/gdAuctionsBiddingWS.asmx?op=GetAuctionList" + server_addr + service_action)
request.putheader("Content-Length", "length")
request.putheader("apiKey", "xxxxxx")
request.putheader("pageNumber", "1")
request.putheader("rowsPerPage", "1")
request.putheader("beginsWithKeyword", "word")
request.endheaders()
request.send(body)
response = request.getresponse().read()
print response
Run Code Online (Sandbox Code Playgroud) 我需要在Django/Python中重写一个现有的SOAP服务(我们有一个WSDL文件),你会向我推荐哪些库或解决方案?链接很好.
PS:ZSI可以解析wsdl,但我不喜欢它,它太旧了(可能是我错了)
关于StackOverflow上的python SOAP客户端存在很多问题.但是,他们都已经3岁多了.
问题是当前主动维护哪些python SOAP客户端库?
我找到的唯一一个是PySimpleSOAP.还有其他人吗?