Python解释了如何在一个请求中发送多个值



我马上为我的蹩脚英语道歉。

我有一个问题,通过zeep客户端发送多个值。有一个条件方法

<s:element name="GetSomething">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="id" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>

如果我需要得到一个值,那么没有问题。我正在使用这个代码:

WSDL = 'example.asmx?WSDL'
session = Session()
transport = Transport(session=session)
client = Client(wsdl=WSDL, transport=transport)
res = client.service.GetCompanyExtendedReport(id='1')
print(res)

但是如果我需要得到多个值。我将给出一个示例xml

<s11:Envelope xmlns:s11='http://schemas.xmlsoap.org/soap/envelope/'>
<s11:Body>
<ns1:GetSomething xmlns:ns1='http://examplesoapapi.ru/idk'>
<ns1:id>1</ns1:id>
<ns1:id>2</ns1:id>
<ns1:id>3</ns1:id>
<ns1:id>4</ns1:id>
<ns1:id>5</ns1:id>
</ns1:GetStateContractReport>
</s11:Body>
</s11:Envelope>

然后我不明白我怎么能发送此类请求通过zeep

WSDL = 'example.asmx?WSDL'
session = Session()
transport = Transport(session=session)
client = Client(wsdl=WSDL, transport=transport)
res = client.service.GetCompanyExtendedReport(id='1', id='2', id='3', ???)
print(res)

很明显,我可以在循环中发送这样的请求,但这不是我需要的…

你不能。

您的id元素定义为:

<s:element minOccurs="0" maxOccurs="1" name="id" type="s:string"/>

表示0或1个id。不是更多。

你需要为更多的调用做一个循环,或者你在你的服务中寻找另一个接受ids列表的操作,而不仅仅是0或1(如果存在的话)。

即使您像示例中那样进行调用,服务也将至多使用一个请求,或者它将完全拒绝请求,原因很简单,因为SOAP是一种协议,并且SOAP服务具有定义的特定契约。它接受符合该契约的请求,而不是您希望拥有的请求(阅读此以获得扩展解释)。

相关内容

  • 没有找到相关文章

最新更新