使用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',我在其他代码中使用它来发出真正的服务请求