我试图让 zeep 打开一个 WSDL,该 WSDL 在名称的开头绑定(bind)了点,并收到 ValueError: Invalid tag name '.USXMLWSSoapBinding' 错误消息。
WSDL 将绑定(bind)名称定义为:
<wsdl:binding name=".USXMLWSSoapBinding" type="impl:USXMLWS">
我可以让它与其他语言和库一起工作,但 python 和 zeep 似乎不同意我的看法:
python -mzeep <wsdl>
或者
import zeep
client = zeep.Client('https://example.com/service.wsdl')
最佳答案
您可以通过 unittest.mock
修补 Zeep 的崩溃行为
from unittest import mock
from zeep import Client
def my_as_qname(value, nsmap, target_namespace=None):
value = value.strip()
if '/' in value: # This is my fix for slash in value
value = value.replace('/', '-')
# More stuff that i removed in this snippet
with mock.patch('zeep.utils.as_qname', side_effect=my_as_qname):
client = Client(wsdl)
就我而言,失败的 WSDL 是法国邮局 « La Poste » 新的 Colissimo 网络服务。
https://ws.colissimo.fr/sls-ws/SlsServiceWS/2.0?wsdl
我想其他人尝试使用 Zeep 也会遇到同样的问题。
关于Python zeep - 绑定(bind)名称以点 (.) 开头时标签名称无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44157873/