На первый взгляд похоже, что у вас проблема с SSL. Вы получаете доступ к URL-адресу https, и по умолчанию обработчик транспорта для suds.client сообщает http.
Проблема
Если вы посмотрите на нижнюю часть WSDL, она указывает местоположение по умолчанию как http://www.clarityaccounting.com/api/v1
, которое является http-URL, но WSDL - это SSL.
<wsdl:service name="v1">
<wsdl:port binding="tns:v1SoapBinding" name="BooksApiV1Port">
<soap:address location="http://www.clarityaccounting.com/api/v1"/>
</wsdl:port>
</wsdl:service>
Если вы выполните http GET для этого URL, вы получите сообщение об ошибке:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>No such operation: (HTTP GET PATH_INFO: /api/v1)</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
Решение
Чтобы это исправить, вам нужно переопределить расположение по умолчанию, когда вы вызываете конструктор Client
, чтобы заставить его придерживаться https:
>>> url
'https://www.clarityaccounting.com/api/v1?wsdl'
>>> client = Client(url, location='https://www.clarityaccounting.com/api/v1')
>>> token = client.service.doLogin('demo', 'demo', 'www.kashoo.com', 'en_US', 300000)
>>> token
(authToken){
authenticationCode = "ObaicdMJZY6UM8xZ2wzGjicT0jQ="
expiryDate = 2010-03-05 12:31:41.000698
locale = "en_US"
myUserId = 4163
site = "www.kashoo.com"
}
Победа!
Совет для будущих целей отладки: включите полную отладку журналирования. SUDS использует стандартную библиотеку logging
, поэтому она дает вам много контроля. Так что я провернул все это до DEBUG
:
import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport').setLevel(logging.DEBUG)
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)
logging.getLogger('suds.wsdl').setLevel(logging.DEBUG)
Это то, что помогло мне сузить его, потому что он явно говорил, что отправляет по http:
DEBUG:suds.transport.http:sending:
URL:http://www.clarityaccounting.com/api/v1
(xml output omitted)
А потом ответ так же сказал:
DEBUG:suds.client:http failed: