python - 未找到 suds 类型:数组,http://www.w3.org/2001/XMLSchema
问题描述
我正在尝试使用 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, )'
我试过了,没有成功:
- “http://www.w3.org/2001/XMLSchema”作为导入类中的参数
- 找不到类型:'(架构,http://www.w3.org/2001/XMLSchema,)
- https://github.com/unomena/suds/issues/2
- Zeep 女巫也不能完全工作(它没有构建“身份验证”方法)。
然后我尝试了一个Node lib,它可以正常工作,但我不能使用它。
是 WSDL 坏了吗?ImportDoctor 的参数是否错误?SUDS 错误?
(Python 3.8.2,suds-community==0.8.5)
谢谢!
解决方案
似乎 WSDL 有 2 种不同的引用数组的方式。一个是 xsd:array,另一个是 SOAP-ENC:Array。
xsd 定义为 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 和 SOAP-ENC 定义为 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/ ”。我确实在最后一个而不是第一个中找到了该数组,但我不是 SOAP 专家。
因此,用 SOAP-ENC:Array 替换每次出现的 xsd:Array 以某种方式解决了它。我仍然不知道出了什么问题:WSDL 或 SUDS 库。
推荐阅读
- reactjs - 在 react + typescript 中避免通用函数类型
- reactjs - 使用 react-pdf 和 react-chartjs-2 生成 pdf
- c# - 获取可为空的最大日期时间
- vba - (访问 VBA 润色)基于另一个文本框更新后自动填充
- git - WebStorm:解决冲突后继续与生成的提交消息合并
- android - 卡在数据库室插入和更新
- amazon-web-services - 如何使用 lambda 版本和别名来使用 CloudFormation 对我的 API 进行版本控制?
- regex - 在这种情况下使用什么正则表达式
- node.js - 如何在安全站点上使用 nodejs ws 模块
- javascript - 代码覆盖率未达到 void set 功能