Клиент Python SOAP с Zeep — доступ к защищенному паролем wsdl

Я пытаюсь создать клиент мыла Python с помощью zeep, но столкнулся с проблемой при попытке доступа к 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'

Что я упускаю или делаю неправильно? Я использую 32-битный python3.6 в Windows 10. Все пакеты были недавно установлены с помощью pip.


person Devligue    schedule 09.05.2017    source источник


Ответы (2)


автор zeep здесь. Похоже, вы столкнулись с ошибкой в ​​Zeep. Можете ли вы отправить сообщение о проблеме, как описано на странице http://docs.python-zeep.org/en/master/reporting_bugs.html на https://github.com/mvantellingen/python-zeep/issues ?

Я посмотрю на это как можно скорее.

person mvantellingen    schedule 09.05.2017

Так что, судя по всему, решения этой проблемы пока нет. Возможно, в будущих выпусках Zeep эта ошибка будет исправлена.

Однако я нашел обходной путь. Вместо Zeep используйте SUDS (или suds-py3 для python3.x). Создание клиента из wsdl с требованиями пользователя и пароля здесь еще проще. Просто используйте:

from suds.client import Client

client = Client(url=WSDL_URL,
                username=WSDL_USERNAME,
                password=WSDL_PASSWORD)
person Devligue    schedule 19.05.2017