Python 3.x 使用Zeep访问受密码保护的wsdl的Python SOAP客户端

Python 3.x 使用Zeep访问受密码保护的wsdl的Python SOAP客户端,python-3.x,authentication,soap,wsdl,zeep,Python 3.x,Authentication,Soap,Wsdl,Zeep,我正在尝试使用zeep创建一个pythonsoap客户机,但在尝试访问wsdl时遇到了一些问题。无论我在网络上尝试了多少现有的解决方案,它们都不再有效,或者只是我的情况有点不同。最有希望的是官方zeep文档中的解决方案,但它仍然不起作用: from requests import Session from requests.auth import HTTPBasicAuth # or HTTPDigestAuth, or OAuth1, etc. from zeep import Client

我正在尝试使用zeep创建一个pythonsoap客户机,但在尝试访问wsdl时遇到了一些问题。无论我在网络上尝试了多少现有的解决方案,它们都不再有效,或者只是我的情况有点不同。最有希望的是官方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中碰到了一只虫子。您能否将记录在案的问题提交至


我会尽快看的。

显然目前还没有解决这个问题的办法。也许在未来的Zeep版本中,这个错误会被修复

不过我找到了一个解决办法。使用SUDS(或python3.x的SUDS-py3)代替Zeep。从wsdl创建具有用户和密码要求的客户机在这里更简单。只需使用:

from suds.client import Client

client = Client(url=WSDL_URL,
                username=WSDL_USERNAME,
                password=WSDL_PASSWORD)