我正在尝试用SUDS、Python创建SOAP客户端,但没有成功。
WSDL在这里:https://login.keyinvoice.com/API3_ws.php?wsdl
代码:
from suds.client import Client
from suds.xsd.doctor import Import, ImportDoctor
imp = Import("http://schemas.xmlsoap.org/soap/encoding/", location="http://schemas.xmlsoap.org/soap/encoding/")
imp.filter.add("http://login.keyinvoice.com/soap/KI_API3")
client = Client("https://login.keyinvoice.com/API3_ws.php?wsdl", doctor=ImportDoctor(imp))
错误:
suds.TypeNotFound: Type not found: '(Array, http://www.w3.org/2001/XMLSchema, )'
I've try, with no success:
- "http://www.w3.org/2001/XMLSchema"作为Import类 的参数
- 类型未找到:'(schema, http://www.w3.org/2001/XMLSchema,)
- https://github.com/unomena/suds/issues/2
- Zeep witch也不能完全工作(它不能构建"authenticate"方法)。
然后我尝试了一个Node库,它只是工作,但我不能使用它。
是WSDL坏了吗?ImportDoctor的参数不好吗?肥皂水虫?
(Python 3.8.2, sads -community==0.8.5)
谢谢!
WSDL似乎有两种不同的引用数组的方式。一个是xsd:array,另一个是SOAP-ENC: array。
xsd定义为xmlns:xsd="http://www.w3.org/2001/XMLSchema"SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"我确实在最后一个中找到了数组,而不是在第一个中,但我不是SOAP专家。
所以用SOAP-ENC:Array替换xsd:Array在某种程度上解决了这个问题。我还是不知道哪里出了问题:是WSDL还是SUDS库。