Python SOAP到代码转换器?

2024-06-28 11:01:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要发送一个SOAP envelope看起来像这样。。。在

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:realops.com:amp:workflow" xmlns:oas="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:dst="DST_JC_Sandbox">
    <soapenv:Header>
      <urn:grid-name>GRID01</urn:grid-name>
      <oas:Security>
         <!--Optional:-->
         <oas:UsernameToken>
            <oas:Username>Network</oas:Username>
            <oas:Password>password</oas:Password>
         </oas:UsernameToken>
      </oas:Security>
   </soapenv:Header>
   <soapenv:Body>
      <dst:TrySoap-Request>
         <dst:strInput1>abc</dst:strInput1>
         <dst:strInput2>abc123</dst:strInput2>
      </dst:TrySoap-Request>
   </soapenv:Body>
</soapenv:Envelope>

我使用的是Pythonsuds。但是,我只是不知道如何控制头部。由于我仍在尝试如何将成功的SOAP调用发送到我的内部测试主机(它确实响应soapUI),所以我只得到了一些被破解的片段。在

^{pr2}$

这样就产生了这样一个肥皂包。。。在

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="Sandbox" xmlns:urn="http://10.1.1.1:8080/path/name/wsdl?grid-name=GRID01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header>
      <urn:grid-name>GRID01</urn:grid-name>
   </SOAP-ENV:Header>
   <ns0:Body>
      <ns1:TrySoap-Request>
         <ns1:strInput1>abc</ns1:strInput1>
         <ns1:strInput2>xyz</ns1:strInput2>
      </ns1:TrySoap-Request>
   </ns0:Body>
</SOAP-ENV:Envelope>

我对这个原理的理解只是,我发送的信封必须与我发布的第一个样本完全相同。此请求不起作用,服务器响应为,“调试:suds.client:http失败:

我知道我的python generated header doesn't match。在

问题:

  1. 我的网址应该显示在标题里吗?在
  2. 如何在UsernameToken标记中嵌套用户名和密码?在
  3. 我正确地构造了urn元素吗?或者有更好的方法吗?在
  4. 如何在标题中获得xmlns:urn="urn:realops.com:amp:workflow"?在
  5. 有没有一个conversion tool的地方,我可以给它一个格式化的信封,并让它吐出Python形成信封所需的代码?在

Tags: nameorgenvhttpsoapgriddstheader
1条回答
网友
1楼 · 发布于 2024-06-28 11:01:40

一个同事给我提供了这个测试电话的解决方案。。。在

from suds.client import Client
from suds.wsse import *
import logging

logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport').setLevel(logging.DEBUG)

url = 'http://10.1.1.1:8080/file/path/wsdl?grid-name=GRID01'
client = Client(url)
security = Security()
token = UsernameToken('JoeBob','password')
security.tokens.append(token)
client.set_options(wsse=security)
gridns = ('tns','urn:realops.com:amp:workflow')
grid = Element('grid-name',ns=gridns).setText('GRID01')
client.set_options(soapheaders=grid)
result = client.service.TrySoap('abc','123')
print result

这个信封就是这个。在

^{pr2}$

这很管用,但我想知道为什么会好一点。我不明白标签:可变格式。我也不太清楚名称空间是如何通过元素调用更改的。在

相关问题 更多 >