Python 带有 Zeep 的 SOAP 客户端 - 访问受密码保护的 wsdl
Python SOAP client with Zeep - accessing password protected wsdl
我正在尝试使用 zeep 创建一个 python soap 客户端,但是 运行 在尝试访问 wsdl 时遇到了一些问题。无论我尝试过多少网络上现有的解决方案,其中 none 仍然有效,或者只是我的情况有点不同。最有前途的是官方 zeep 文档中的解决方案,但它仍然不太有效:
from requests import Session
from requests.auth import HTTPBasicAuth # or HTTPDigestAuth, or OAuth1, etc.
from zeep import Client
from zeep.transports import Transport
session = Session()
session.auth = HTTPBasicAuth(user, password)
client = Client('https://url/to/my_wsdl.wsdl',
transport=Transport(session=session))
但是我得到一个错误:
File "C:\Python36-32\lib\site-packages\zeep\client.py", line 124, in __init__
self.wsdl = Document(wsdl, self.transport, strict=strict)
File "C:\Python36-32\lib\site-packages\zeep\wsdl\wsdl.py", line 82, in __init__
root_definitions.resolve_imports()
File "C:\Python36-32\lib\site-packages\zeep\wsdl\wsdl.py", line 234, in resolve_imports
binding.resolve(self)
File "C:\Python36-32\lib\site-packages\zeep\wsdl\definitions.py", line 128, in resolve
operation.resolve(definitions)
File "C:\Python36-32\lib\site-packages\zeep\wsdl\bindings\soap.py", line 428, in resolve
self.output.resolve(definitions, self.abstract.output_message)
File "C:\Python36-32\lib\site-packages\zeep\wsdl\messages\soap.py", line 285, in resolve
self.body = self._resolve_body(info['body'], definitions, parts)
File "C:\Python36-32\lib\site-packages\zeep\wsdl\messages\soap.py", line 423, in _resolve_body
element = part.element.clone()
AttributeError: 'NoneType' object has no attribute 'clone'
我错过了什么或做错了什么?我在 windows 10 上使用 python3.6 32 位。所有软件包都是使用 pip 全新安装的。
这里是 zeep 的作者。好像你在 Zeep 中遇到了一个错误。您可以按照 http://docs.python-zeep.org/en/master/reporting_bugs.html to https://github.com/mvantellingen/python-zeep/issues 中的记录提交问题吗?
那我尽快看看
显然目前还没有解决这个问题的方法。也许在未来的 Zeep 版本中会修复此错误。
不过我找到了解决方法。使用 SUDS(或 python3.x 的 suds-py3)代替 Zeep。从具有用户和密码要求的 wsdl 创建客户端在这里更加简单。只需使用:
from suds.client import Client
client = Client(url=WSDL_URL,
username=WSDL_USERNAME,
password=WSDL_PASSWORD)
我正在尝试使用 zeep 创建一个 python soap 客户端,但是 运行 在尝试访问 wsdl 时遇到了一些问题。无论我尝试过多少网络上现有的解决方案,其中 none 仍然有效,或者只是我的情况有点不同。最有前途的是官方 zeep 文档中的解决方案,但它仍然不太有效:
from requests import Session
from requests.auth import HTTPBasicAuth # or HTTPDigestAuth, or OAuth1, etc.
from zeep import Client
from zeep.transports import Transport
session = Session()
session.auth = HTTPBasicAuth(user, password)
client = Client('https://url/to/my_wsdl.wsdl',
transport=Transport(session=session))
但是我得到一个错误:
File "C:\Python36-32\lib\site-packages\zeep\client.py", line 124, in __init__
self.wsdl = Document(wsdl, self.transport, strict=strict)
File "C:\Python36-32\lib\site-packages\zeep\wsdl\wsdl.py", line 82, in __init__
root_definitions.resolve_imports()
File "C:\Python36-32\lib\site-packages\zeep\wsdl\wsdl.py", line 234, in resolve_imports
binding.resolve(self)
File "C:\Python36-32\lib\site-packages\zeep\wsdl\definitions.py", line 128, in resolve
operation.resolve(definitions)
File "C:\Python36-32\lib\site-packages\zeep\wsdl\bindings\soap.py", line 428, in resolve
self.output.resolve(definitions, self.abstract.output_message)
File "C:\Python36-32\lib\site-packages\zeep\wsdl\messages\soap.py", line 285, in resolve
self.body = self._resolve_body(info['body'], definitions, parts)
File "C:\Python36-32\lib\site-packages\zeep\wsdl\messages\soap.py", line 423, in _resolve_body
element = part.element.clone()
AttributeError: 'NoneType' object has no attribute 'clone'
我错过了什么或做错了什么?我在 windows 10 上使用 python3.6 32 位。所有软件包都是使用 pip 全新安装的。
这里是 zeep 的作者。好像你在 Zeep 中遇到了一个错误。您可以按照 http://docs.python-zeep.org/en/master/reporting_bugs.html to https://github.com/mvantellingen/python-zeep/issues 中的记录提交问题吗?
那我尽快看看
显然目前还没有解决这个问题的方法。也许在未来的 Zeep 版本中会修复此错误。
不过我找到了解决方法。使用 SUDS(或 python3.x 的 suds-py3)代替 Zeep。从具有用户和密码要求的 wsdl 创建客户端在这里更加简单。只需使用:
from suds.client import Client
client = Client(url=WSDL_URL,
username=WSDL_USERNAME,
password=WSDL_PASSWORD)