如何使用pysimplesoap提取SOAP响应?

时间:2013-09-26 07:29:46

标签: pysimplesoap

我是使用pysimplesoap的新手。我成功使用pysimplesoap为SOAP服务器生成soap请求,并且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>

我尝试使用打印响应或打印(响应),但没有显示。

1 个答案:

答案 0 :(得分:2)

response对象是 pysimplesoap.client.SimpleXMLElement

在幕后,print(response)将调用其__str__()方法,已做出选择,pysimplesoap `__str__()返回节点的文本内容(如果有),如果您的节点不包含文本内容,例如:

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

...然后,__str__()将不返回任何内容,打印也是如此。

或者,您可能想要

  • 使用SimpleXMLElement方法导航答案的XML树
    • children()抓住儿童名单
    • tag['attr'](dict表示法)访问XML标记的属性
    • tag.get_name()获取代码名称;
  • 检查完整答案作为字符串(包括Soap标题)作为字符串调用repr(response),但它更多用于调试目的。

另请参阅在线the basic client documentation