I am using python-3.7 and zeep to create a soap client for a web service.
I am able to hit the endpoint after a long struggle but I am not sure how to create request.xml for the service.
from requests import Session
from zeep import Client
from zeep.transports import Transport
import logging.config
logging.config.dictConfig({
'version': 1,
'formatters': {
'verbose': {
'format': '%(name)s: %(message)s'
}
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
},
'loggers': {
'zeep.transports': {
'level': 'DEBUG',
'propagate': True,
'handlers': ['console'],
},
}
})
session = Session()
session.cert = cert=('certificate.pem', 'plainkey.pem')
transport = Transport(session=session)
client = Client('https://www.soapclient.com:7851/SoapServices/SoapReportDetailsService',transport=transport)
result = client.service.service['SoapReportDetailsService']['SoapReportDetailsPoty'].GetReportDetails(
reportName="usageByISBN")
print(result)
While executing the code, I am getting below exception,
zeep.transports: Loading remote data from
https://www.soapclient.com:7851/SoapServices/SoapReportDetailsService
Traceback (most recent call last):
File "sample.py", line 32, in <module>
client = Client('https://www.soapclient.com:7851/SoapServices/SoapReportDetailsService',transport=transport)
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/zeep/client.py", line 62, in __init__
wsdl, self.transport, settings=self.settings)
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/zeep/wsdl/wsdl.py", line 82, in __init__
document = self._get_xml_document(location)
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/zeep/wsdl/wsdl.py", line 143, in _get_xml_document
location, self.transport, self.location, settings=self.settings)
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/zeep/loader.py", line 74, in load_external
content = transport.load(url)
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/zeep/transports.py", line 110, in load
content = self._load_remote_data(url)
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/zeep/transports.py", line 127, in _load_remote_data
response.raise_for_status()
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/models.py", line 939, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: https://www.soapclient.com:7851/SoapServices/SoapReportDetailsService
But i am able to hit the same service via postman,sample curl for a reference,
curl -X POST -H "Content-Type: text/xml" -H "Cache-Control: no-cache" -H "Postman-Token: 9bc53d16-bc5c-d026-d720-830c25279950" -d '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<ns3:bookHeader xmlns:ns3="http://ws.soapclient.com/">
<bookCredentials>
<customerId>123</customerId>
<password>123@45</password>
<userId>3456</userId>
</Credentials>
</ns3:bookHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns3:getReportDetails xmlns:ns3="http://ws.soapClient.com/">
<reportName>usageByISBN</reportName>
</ns3:getReportDetails>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>' "https://www.soapclient.com:7851/SoapServices/SoapReportDetailsService"
I am completely new to python. so i am not sure how to write a client using python.Any help would be appreciable.