Как добавить фабрично созданный тип в качестве заголовка в suds? - PullRequest
0 голосов
/ 05 ноября 2010

Кажется, я не могу получить пену, работающую с моей настройкой. Я должен передать контекст с установленным удаленным пользователем, прежде чем я смогу использовать любую из функций в API. Я пытался сделать следующее:

client = Client(url, username=userid, password=password)
apiContext = client.factory.create("apiCallContext")     # This is listed in the types
apiContext.remoteUser = "serviceAccount"                 # when I print the client

client.set_options(soapheaders=apiContext)
client.service.getActiveIPs()

В течение всего процесса создается впечатление, что все создается правильно (если я печатаю клиент, я вижу все функции и типы, если я печатаю apiContext, я вижу, что все установлено правильно), но заголовки на самом деле не кажутся быть настроенным:

...
DEBUG:suds.client:sending to ($URL) message:
  <?xml version="1.0" encoding="UTF-8"?>
  <SOAP-ENV:Envelope xmlns:ns0=$NS 
                     xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/"
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                     xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header/>
  <ns1:Body>
    <ns0:getActiveIPs/>
  </ns1:Body>
  </SOAP-ENV:Envelope>
DEBUG:suds.client:headers = {'SOAPAction': u'""', 
                             'Content-Type': 'text/xml; charset=utf-8'}
DEBUG:suds.transport.http:sending:
  URL:$URL
  HEADERS: {'SOAPAction': u'""', 'Content-Type': 'text/xml; charset=utf-8', 
            'Content-type': 'text/xml; charset=utf-8', 'Soapaction': u'""'}
...

Я нигде не вижу контекста в заголовках, и сервер выдает ошибку, что не установлен удаленный пользователь.

Что я делаю не так?

1 Ответ

1 голос
/ 12 ноября 2010

Не зная точной спецификации веб-службы, с которой вы работаете, я могу лишь рискнуть предположить этот ответ, но заголовок выглядит аналогично веб-службе, которую я использовал в прошлом.Вы пытались создать элементы напрямую и таким образом передать их в заголовок ?:

from suds.sax.element import Element
...
NS = ('h', SOME_NAMESPACE)
apiContext = Element('apiContext')
authcred = Element('authenticationCredential', ns=NS)
username = Element(userid, ns=NS).setText('USERNAME')
passw = Element(password, ns=NS).setText('PASSWORD')
authcred.append(username)
authcred.append(passw)
apiContext.append(authcred)
client.set_options(soapheaders=apiContext)

, т. Е. Является ли часть аутентификации объекта контекста?

...