python - 通过 zeep 请求多个具有相同名称的标签
问题描述
晚上好!我马上为我糟糕的英语道歉。
我通过 zeep 发送具有相同名称的嵌套字段时遇到问题,zeep 忽略所有字段并仅发送最后一个字段。
我对zeep库有这样的功能,
def send_data(self, data):
response = self.client.service.GetAddrLetter(
Key = '12345',
AddrInfo={'RcpnName': data['recipient_name'],
'RcpnIndex': data['recipient_index'],
'RcpnPhone': data['recipient_phone'],
'RcpnEmail': 'my@mail.mail',
'RcpnStreet': data['recipient_address'],
'SndrName': data['sender_name'],
'SndrPhone': data['sender_phone'],
'SndrIndex': data['sender_index'],
'SndrStreet': data['sender_address'],
'AddInfo':{'Field': data['request_order'], 'Field': data['old_order'], 'Field': data['new_order']},
)
return response
数据是一个数据字典,我从中获取值并将其发送到服务。
这是一个工作请求的样子,通过浏览器或soapui发送这个请求,所有字段都得到了完美的处理。
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:pos="blabla">
<soapenv:Header/>
<soapenv:Body>
<pos:GetAddrLetterRequest>
<pos:Key>1234567</pos:Key>
<pos:AddrInfo>
<!--Optional:-->
<pos:RcpnName>Name Name</pos:RcpnName>
<pos:RcpnPhone>123456</pos:RcpnPhone>
<!--Optional:-->
<pos:RcpnEmail>mail@mail</pos:RcpnEmail>
<pos:RcpnStreet>my street</pos:RcpnStreet>
<pos:SndrName>shop_name</pos:SndrName>
<pos:SndrPhone>123456</pos:SndrPhone>
<pos:SndrStreet>my street</pos:SndrStreet>
<!--Optional:-->
<pos:AddInfo>
<!--0 to 5 repetitions:-->
<pos:Field>111</pos:Field>
<pos:Field>222</pos:Field>
<pos:Field>333</pos:Field>
</pos:AddInfo>
</pos:AddrInfo>
</pos:GetAddrLetterRequest>
</soapenv:Body>
</soapenv:Envelope>
解决方案
晚上好,经过长时间的折磨,我解决了这个问题,我不能说我的解决方案是优雅或正确的,但它有效,这对我来说是最重要的。
我在图书馆研究了这部分手册,但是,嵌套标签的解决方案都没有帮助我
然后我做了以下,我只是从字典中取出我需要的字段,并使用连接将它添加到我需要的字段中。
def send_data(self, data):
request_order = str(data['request_order'])
old_order = str(data['old_order'])
new_order = str(data['new_order'])
field_value = request_order + '\n' + old_order + '\n' + new_order
response = self.client.service.GetAddrLetter(
Key = '12345',
AddrInfo={'RcpnName': data['recipient_name'],
'RcpnIndex': data['recipient_index'],
'RcpnPhone': data['recipient_phone'],
'RcpnEmail': 'my@mail.mail',
'RcpnStreet': data['recipient_address'],
'SndrName': data['sender_name'],
'SndrPhone': data['sender_phone'],
'SndrIndex': data['sender_index'],
'SndrStreet': data['sender_address'],
'AddInfo':{'Field': field_value },
)
return response
现在一切正常,我为糟糕的代码道歉,我只是一名初级开发人员,我希望这对某人有用
推荐阅读
- python - 结构空字节与 \x00
- python - 卷积:2d vs 1d 2-pass 给出不同的结果
- python - Selenium 不会创建会话。
- javascript - 在 Wordpress 网站上迁移后未显示图像上的悬停
- ballerina - 如何在 Ballerina 的 POST 请求中发送表单数据?
- r - geom_boxplot + scale_y_log10 错误
- apache-spark-sql - 避免使用 spark.sql 对嵌套 JSON 的查询结果进行展平
- iot - Lora 传感器 (Elsys ERS) 到 Lora 天线 (Multitech Antenna)
- angular - Angular 2 - 无法绑定来自 HTTP Get 请求的数据
- mysql - 如何使用 SSH 连接到 MySql 服务器?