Я новичок в SOAP-запросах и программировании в целом.Я хотел бы получить доступ к WSDL, для которого требуется авторизация токена на предъявителя, чтобы использовать одну из своих услуг.
Информация о службе, к которой я хочу получить доступ после вызова pyhton -mzeep *WSDL_url*
:
getInfo(param1: xsd:string, param2: xsd:anySimpleType, param3: xsd:anySimpleType) -> out: ns0:ResponseCurve[]
СначалаЯ получаю токен с:
import zeep
user = 'my_user'
userpass = 'my_pass'
token = client.service.getAuthToken(user,userpass)
Затем я хотел бы запросить сервис getInfo, который требует три параметра:
my_info = client.service.getInfo('param1', 'param2', 'param3')
Я знаю провайдера, что токен нужен каждый разЯ хочу получить доступ к этой службе, и в документации указано следующее о заголовках, касающихся аутентификации:
Авторизация: Bearer eyJhbGciOiJIUzI1N [...]
Я пытался пройтизаголовок как dict в _soapheaders
, но не работает.
Я могу получить доступ к сервису с помощью принудительных запросов:
def get_response_from_provider(token, param1, param2, param3):
url = "WSDL url"
headers = {'Authorization': 'Bearer ' + token,
'content-type': 'text/xml'}
body = """
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsl="uri">
<soapenv:Header/>
<soapenv:Body>
<wsl:getInfo>
<param1>""" + param1 + """</param1>
<param2>""" + param2 + """ </param2>
<param3>""" + param3 + """ </param3>
</wsl:getInfo>
</soapenv:Body>
</soapenv:Envelope>"""
response = requests.post(url, data=body, headers=headers)
print("Info recieved...")
return response
Однако я хотел бы получить доступ к Сервисам через клиент SOAP.
Вот как они добавляют токен в PHP:
$soap->soapClient->_stream_context = stream_context_create([
'http' => [
'header' => sprintf('Authorization: Bearer %s', $authTokenResponse->token)
]
]);
Есть идеи, как добавить заголовок с токеном к клиентскому запросу в Python ??
Я видел многие публикуют сообщения с SOAP + Python в SOF, но не могут решить проблему.Даже с документацией Zeep я не смог заставить ее работать.
Спасибо