Как передать dict в заголовках dict клиенту suds для вызовов bmc лекарств wsdl? - PullRequest
0 голосов
/ 16 июня 2019

Несмотря на передачу учетных данных, мыльный вызов не проходит проверку подлинности через Suds в python.

Я не могу передать имя пользователя и пароль напрямую, поскольку моему веб-сервису нужны имя пользователя и пароль в качестве значения для параметров.

from suds.client import Client
c = Client('http://<<server.domain:port>>/arsys/WSDL/public/<<server>>/<<webservice>>')
request_data = {
            "Qualification":
                "'Modified Date' >=\"{0}\" and "
                "'Categorization Tier 2' = \"{1}\" and "
                "'Submitter' = \"{2}\"".format('12/17/2018', '<<tier>>', '<<submitter>>')
        }
soap_headers = \
    {
        'parameters': {
            'userName': '<<username>>',
            'password': '<<password>>'
        }
    }
c.set_options(soapheaders=soap_headers)
c.service.<<soapcallormethodname>>(**request_data)

Ожидаемый результат: Метод должен быть успешно выполнен и вернуть список заявок на лекарства.

Фактический результат:

<suds.sax.document.Document object at 0x06195D90>
Traceback (most recent call last):
  File "C:\Users\xx\AppData\Roaming\Python\Python37\site-packages\suds\transport\http.py", line 82, in send
    fp = self.u2open(u2request)
  File "C:\Users\xx\AppData\Roaming\Python\Python37\site-packages\suds\transport\http.py", line 132, in u2open
    return url.open(u2request, timeout=tm)
  File "C:\Program Files (x86)\Python37-32\lib\urllib\request.py", line 531, in open
    response = meth(req, response)
  File "C:\Program Files (x86)\Python37-32\lib\urllib\request.py", line 641, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Program Files (x86)\Python37-32\lib\urllib\request.py", line 569, in error
    return self._call_chain(*args)
  File "C:\Program Files (x86)\Python37-32\lib\urllib\request.py", line 503, in _call_chain
    result = func(*args)
  File "C:\Program Files (x86)\Python37-32\lib\urllib\request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 500: Internal Server Error

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\xx\AppData\Roaming\Python\Python37\site-packages\suds\client.py", line 613, in send
    reply = self.options.transport.send(request)
  File "C:\Users\xx\AppData\Roaming\Python\Python37\site-packages\suds\transport\https.py", line 66, in send
    return HttpTransport.send(self, request)
  File "C:\Users\xx\AppData\Roaming\Python\Python37\site-packages\suds\transport\http.py", line 94, in send
    raise TransportError(e.msg, e.code, e.fp)
suds.transport.TransportError: Internal Server Error

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:/projects/xxxxx/sudsss.py", line 17, in <module>
    c.service.New_GetList_Operation_0(**request_data)
  File "C:\Users\xx\AppData\Roaming\Python\Python37\site-packages\suds\client.py", line 521, in __call__
    return client.invoke(args, kwargs)
  File "C:\Users\xx\AppData\Roaming\Python\Python37\site-packages\suds\client.py", line 581, in invoke
    result = self.send(soapenv)
  File "C:\Users\xx\AppData\Roaming\Python\Python37\site-packages\suds\client.py", line 619, in send
    description=tostr(e), original_soapenv=original_soapenv)
  File "C:\Users\xx\AppData\Roaming\Python\Python37\site-packages\suds\client.py", line 670, in process_reply
    raise WebFault(fault, replyroot)
suds.WebFault: Server raised fault: 'ARERR [149] A user name must be supplied in the control record'

Примечание: я не могу использовать Zeep, потому что его зависимости не поддерживаются в Python 3.4.3 (где я хочу строго кодировать)

...