Python SOAP client with Zeep - authentication
authentication, python, soap, wsdl
Solution
Probably with the newer Version of zeep the older solution does not work anymore. Here is the new way:
from requests.auth import HTTPBasicAuth # or HTTPDigestAuth, or OAuth1, etc.
from requests import Session
from zeep import Client
from zeep.transports import Transport
session = Session()
session.auth = HTTPBasicAuth(user, password)
client = Client('http://my-endpoint.com/production.svc?wsdl',
transport=Transport(session=session))
Problem
I am trying to use Zeep to implement a SOAP client, as it seems the only maintained library at the moment: - ZSI looked very good but its latest version on pypi dates 2006 - suds seemed to be a popular alternative, but the master is unmaintained since 2011 and there are a lot of forks out there but none seems "official" and "recent" enough to be used in a large project. So, trying to use Zeep, I am stuck with the authentication required by the server to access the WSDL. Such operation was quite easy with ZSI: ``` from ZSI.client import Binding from ZSI.auth import AUTH b = Binding(url='http://mysite.dom/services/MyWebServices?WSDL') b.SetAuth(AUTH.httpbasic, 'userid', 'password') ``` and I can find something similar in __main__.py of Zeep: ``` from six.moves.urllib.parse import urlparse from zeep.cache import InMemoryCache, SqliteCache from zeep.client import Client from zeep.transports import Transport cache = SqliteCache() if args.cache else InMemoryCache() transport_kwargs = {'cache': cache} result = urlparse(args.wsdl_file) if result.username or result.password: transport_kwargs['http_auth'] = (result.username, result.password) transport = Transport(**transport_kwargs) client = Client(args.wsdl_file, transport=transport) ``` but that does not work in my case, I get an error: ``` Exception: HTTPConnectionPool(host='schemas.xmlsoap.org', port=80): Max retries exceeded with url: /soap/encoding/ (Caused by NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection object at 0x7f3dab9d30b8>: Failed to establish a new connection: [Errno 110] Connection timed out',)) ```