gpt4 book ai didi

python - 如何通过 SOAPPy (python) 或 SUDS 发送嵌套的 SOAP 请求

转载 作者:行者123 更新时间:2023-11-28 18:42:38 30 4
gpt4 key购买 nike

我正在尝试生成与此类似的 soap 请求:

我已经能够通过 soappy 访问服务器,但是我没有找到一个很好的例子来将 nest xml 参数传递给 GetStopMonitoringService

如果有人可以提供一些信息/例如示例,我会的。

谢谢。

我需要通过 python 生成的示例 soap 请求:

    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:acsb="http://www.ifopt.org.uk/acsb" xmlns:datex2="http://datex2.eu/schema/1_0/1_0" xmlns:ifopt="http://www.ifopt.org.uk/ifopt" xmlns:siri="http://www.siri.org.uk/siri" xmlns:siriWS="http://new.webservice.namespace" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="./siri">
<SOAP-ENV:Header />
<SOAP-ENV:Body>
<siriWS:GetStopMonitoringService>
<Request xsi:type="siri:ServiceRequestStructure">
<siri:RequestTimestamp>2012-10-31T09:39:39.480+02:00</siri:RequestTimestamp>
<siri:RequestorRef xsi:type="siri:ParticipantRefStructure">KLM12345</siri:RequestorRef>
<siri:MessageIdentifier xsi:type="siri:MessageQualifierStructure">0100700:1351669188:4684</siri:MessageIdentifier>
<siri:StopMonitoringRequest version="IL2.6" xsi:type="siri:StopMonitoringRequestStructure">
<siri:RequestTimestamp>2012-10-31T09:39:39.480+02:00</siri:RequestTimestamp>
<siri:MessageIdentifier xsi:type="siri:MessageQualifierStructure">0</siri:MessageIdentifier>
<siri:PreviewInterval>PT1H</siri:PreviewInterval>
<siri:MonitoringRef xsi:type="siri:MonitoringRefStructure">39795</siri:MonitoringRef>
<siri:MaximumStopVisits>100</siri:MaximumStopVisits>
</siri:StopMonitoringRequest>
</Request>
</siriWS:GetStopMonitoringService>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我使用这个 python 代码:

    #!/usr/bin/python
from SOAPpy import SOAPProxy
import httplib
httplib.HTTPConnection.debuglevel = 1
soapaction='http://siri.motrealtime.co.il:8081/Siri/SiriServices/GetStopMonitoringService'
namespace='http://www.ifopt.org.uk/ifopt'
server = SOAPProxy('http://siri.motrealtime.co.il:8081/Siri/SiriServices',soapaction=soapaction,namespace=namespace)
Request = {
'RequestTimestamp':"2014-02-04T09:39:39.480+02:00",
'RequestorRef':"AG566778",
'MessageIdentifier':"0100700:1351669188:4684",
'StopMonitoringRequest':
{'version':"IL2.6",
'RequestTimestamp' :"2014-02-04T09:39:39.480+02:00",
'MessageIdentifier':0,
'PreviewInterval':"PT1H",
'MonitoringRefStructure':21705,
'MaximumStopVisits':100}
}

server.soapproxy.config.dumpSOAPOut = 1
server.soapproxy.config.dumpSOAPIn = 1
print server.GetStopMonitoringService(Request = Request)

还是不行

最佳答案

我阅读了源代码来解决这个问题。我建议您在遇到困难时也这样做!

您的问题(对于 SOAPpy)的基本答案是您需要使用“structType”来创建嵌套。这是一个示例代码片段,我在其中添加了一个 soap header ,并在该 header 中嵌套了一个“SessionHeader”节点,并在其中嵌套了一个“sessionId”节点。

from SOAPpy import WSDL, Types as soapTypes
....
soapProxy = server.soapProxy._sa( "urn:sessionid" )
soapHeader = soapTypes.headerType()
soapHeader.SessionHeader = soapTypes.structType( None, "SessionHeader" )
soapHeader.SessionHeader.sessionId = soapTypes.stringType( sessionId )
soapProxy = soapProxy._hd( soapHeader )
server.soapproxy = soapProxy

生成此 SOAP(嗯,xml 的 header 部分):

<SOAP-ENV:Header>
<xsd:SessionHeader SOAP-ENC:root="1">
<sessionId xsi:type="xsd:string">345423534532774</sessionId>
</xsd:SessionHeader>
</SOAP-ENV:Header>

SOAP 主体也可以实现同样的效果。

请注意,您在此处看到“SessionHeader”或“sessionid”的任何地方都是任意自定义。出于您自己的目的,这些名称可以是您想要的任何名称。

关于python - 如何通过 SOAPPy (python) 或 SUDS 发送嵌套的 SOAP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24403495/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com