У меня проблема с корректным взаимодействием с SOAP API, работающим на Axis2:
Что происходит, я должен вызвать метод login с двумя аргументами (loginName и password), и он возвращает маркер аутентификации, который я буду использовать для последующего взаимодействия.
#!/usr/bin/python
from SOAPpy import SOAPProxy
s_user = 'Administrator'
s_pass = 'securityThroughObscurity'
s_host = '192.168.76.130:8998'
namespace = 'http://bcc.inc.com/IncSecurity'
url = 'http://' + s_host + '/axis2/services/IncSecurityService'
DHCPServ = SOAPProxy(url, namespace)
DHCPServ.config.dumpSOAPOut = 1
DHCPServ.config.dumpSOAPIn = 1
DHCPResp = DHCPServ.login(loginName=s_user, password=s_pass)
Сервер Axis2 на другой стороне возвращает ошибку XML, сообщающую Data element of the OM Node is NULL
. Глядя на журналы Axis2, я вижу ошибку adb_login.c(383) non nillable or minOuccrs != 0 element loginName missing
Затем пакет захватил XML-файл login
от известного работающего Java-клиента по сравнению с XML-кодом этого клиента, и между ними есть различия:
SOAPpy:
<ns1:login xmlns:ns1="http://bcc.inc.com/IncSecurity" SOAP-ENC:root="1">
<password xsi:type="xsd:string">securityThroughObscurity</password>
<loginName xsi:type="xsd:string">Administrator</loginName>
</ns1:login>
Java:
<ns2:login xmlns:ns2="http://bcc.inc.com/IncSecurity">
<ns2:loginName>Administrator</ns2:loginName>
<ns2:password>securityThroughObscurity</ns2:password>
</ns2:login>
Таким образом, это означает, что по какой-то причине (возможно, из-за моего недостатка знаний в Python и SOAPpy) пространство имен не применяется к переменным, используемым в методе login
, поэтому, во всех учетных записях они на самом деле не существует и ошибка гарантирована.
Кроме того, кажется, что они переворачивают переменные и вводят пароль перед loginName, но я не думаю, что это имеет большое значение.
Что я делаю не так?