Заголовок авторизации Bearer Token в SOAP-клиенте с Zeep и Python - PullRequest
0 голосов
/ 06 декабря 2018

Я новичок в 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 я не смог заставить ее работать.

Спасибо

1 Ответ

0 голосов
/ 01 марта 2019

Я хотел сделать что-то похожее, оказалось, что оно есть в документации, но это скрыто, вы можете найти его здесь:

https://python -zeep.readthedocs.io/en/master/settings.html#context-manager

Короче говоря, вы можете сделать что-то вроде:

settings = Settings(extra_http_headers={'Authorization': 'Bearer ' + token})
client = zeep.Client(wsdl=url, settings=settings)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...