Как извлечь ответ SOAP с помощью pysimplesoap?

Я новичок в использовании pysimplesoap. Мне удалось с помощью pysimplesoap сгенерировать запрос мыла на сервер SOAP, и сервер мыла ответил правильно, однако я не знаю, как извлечь возвращенную информацию.

Это мой код на pysimplesoap для запроса

> from pysimplesoap.client import SoapClient
> client = SoapClient(location="http://192.168.206.111:8998/axis2/services/SecurityService", action="", namespace="http://www.labtest.com/Security", ns="ns3")
> response = client.call("login", ("ns3:loginName", "administrator"), ("ns3:password", "admin"))

Ответ SOAP представлен в следующем формате.

   <soapenv:Envelope
        xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
        <soapenv:Body>
            <n:loginResponse
                xmlns:n="http://www.labtest.com/Security"
                xmlns:n0="http://www.labtest.com/Types">
                <n:errorCode>
                    <n0:hasError>
                        false
                        </n0:hasError>
                    <n0:status>
                        STATUS_SUCCESS
                        </n0:status>
                    </n:errorCode>
                <n:authorizationToken>
                    <n0:token>
                        6430303938366138316265646532313138623866353235343030346130653330
                        </n0:token>
                    <n0:securityPrivileges>
                        <n0:values>
                            <n0:securityAttribute>
                                SUPER_USER_ACCESS
                                </n0:securityAttribute>
                            <n0:accessRights>
                                <n0:values>
                                    FULL_CONTROL
                                    </n0:values>
                                </n0:accessRights>
                            </n0:values>
                        </n0:securityPrivileges>
                    </n:authorizationToken>
                </n:loginResponse>
            </soapenv:Body>
        </soapenv:Envelope>

Я пытался использовать ответ печати или печать (ответ), но ничего не появилось.


person user1087418    schedule 26.09.2013    source источник


Ответы (1)


Объект response представляет собой pysimplesoap.client.SimpleXMLElement.

За капотом print(response) будет вызывать свой метод __str__(), выбор сделан, для pysimplesoap, который `__str__() возвращает текстовое содержимое узла (если есть), если ваш узел не содержит текстового содержимого, например:

<MySoapResponse>
    <child tag attr="value />
</MySoapResponse>

… тогда __str__() ничего не вернет, как и печать.

В качестве альтернативы вы можете захотеть

  • navigate the XML tree of your answer by using SimpleXMLElement methods :
    • children() to grab childrens list
    • tag['attr'] (нотация dict) для доступа к атрибутам тега XML
    • tag.get_name() чтобы получить имя тега;
  • просмотреть полный ответ в виде строки (включая заголовки Soap) в виде строки, вызывающей repr(response), но это больше для целей отладки.

См. также основную клиентскую документацию в Интернете.

person Jocelyn delalande    schedule 20.11.2013