使用suds-py3时获取最新SOAP请求中使用的http://tempuri.org/节点
Get the http://tempuri.org/ node used in the latest SOAP request when using suds-py3
我正在使用 suds-py3 进行 SOAP 网络调用。这里的问题是 http://tempuri.org/ 的命名空间不断在 'ns0' 和 'ns1' 之间切换。
因此,在我传递我的 xml 参数之前,我想知道它目前正在接受哪个缩写 'ns0' 或 'ns1'
我的计划是故意创建一个异常并解析异常输出以获得它期望的缩写。下面是我的代码。这给了我适当的例外,但是当我试图将它放入一个变量时它没有帮助,它只是给了我 class.
from suds import WebFault
c = client.Client(wsdl_url)
try:
c.service.getcategorylist()
except WebFault:
x=repr(WebFault)
它打印出下面的内容
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://tempuri.org/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns1:Body>
<ns0:getcategorylist/>
</ns1:Body>
</SOAP-ENV:Envelope>
但是当我尝试检查 x 中的内容时,它给出以下内容
"<class 'suds.WebFault'>"
我需要将 SOAP 请求部分放入一个变量中,这样我就可以得到 http://tempuri.org/ 'ns0'
的名称空间缩写
感谢您的帮助。
好的,已找到解决此问题的方法。
wsdl_url = 'https://..?wsdl'
c = client.Client(wsdl_url)
# call service without any parameters to get error
try:
c.service.getcategorylist()
except:
pass
# this will give the last call details
x = str(c.last_sent())
X 将保存最后一次通话的详细信息如下
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://tempuri.org/" xmlns:SOAP-
NV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns1:Body>
<ns0:getcategorylist/>
</ns1:Body>
</SOAP-ENV:Envelope>
提取当前使用的节点缩写
ix = x.find('="http://tempuri.org/"')
node = x[ix - 3:ix]
现在节点拥有最新的节点缩写'ns0/ns1',我在其他代码中使用它来发出真正的服务请求
我正在使用 suds-py3 进行 SOAP 网络调用。这里的问题是 http://tempuri.org/ 的命名空间不断在 'ns0' 和 'ns1' 之间切换。 因此,在我传递我的 xml 参数之前,我想知道它目前正在接受哪个缩写 'ns0' 或 'ns1'
我的计划是故意创建一个异常并解析异常输出以获得它期望的缩写。下面是我的代码。这给了我适当的例外,但是当我试图将它放入一个变量时它没有帮助,它只是给了我 class.
from suds import WebFault
c = client.Client(wsdl_url)
try:
c.service.getcategorylist()
except WebFault:
x=repr(WebFault)
它打印出下面的内容
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://tempuri.org/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns1:Body>
<ns0:getcategorylist/>
</ns1:Body>
</SOAP-ENV:Envelope>
但是当我尝试检查 x 中的内容时,它给出以下内容
"<class 'suds.WebFault'>"
我需要将 SOAP 请求部分放入一个变量中,这样我就可以得到 http://tempuri.org/ 'ns0'
的名称空间缩写感谢您的帮助。
好的,已找到解决此问题的方法。
wsdl_url = 'https://..?wsdl'
c = client.Client(wsdl_url)
# call service without any parameters to get error
try:
c.service.getcategorylist()
except:
pass
# this will give the last call details
x = str(c.last_sent())
X 将保存最后一次通话的详细信息如下
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://tempuri.org/" xmlns:SOAP-
NV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns1:Body>
<ns0:getcategorylist/>
</ns1:Body>
</SOAP-ENV:Envelope>
提取当前使用的节点缩写
ix = x.find('="http://tempuri.org/"')
node = x[ix - 3:ix]
现在节点拥有最新的节点缩写'ns0/ns1',我在其他代码中使用它来发出真正的服务请求