使用Python向soapws发送带有附件的XML

2024-10-02 04:25:56 发布

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

在过去的几个星期里,我一直在学习Python,并尝试将一个定制的XML发送到公共测试WS。现在我觉得我没有任何进展。因此,我需要帮助或任何形式的建议,我目前的情况。在

如果您使用SoapUI或其他方法分析它,soapws将请求以下代码(我尝试过-mzeep)。在

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.sunat.gob.pe">    <soapenv:Header/>    <soapenv:Body>
      <ser:sendBill>
         <!--Optional:-->
         <fileName>?</fileName>
         <!--Optional:-->
         <contentFile>?</contentFile>
         <!--Optional:-->
         <partyType>?</partyType>
      </ser:sendBill>    </soapenv:Body> </soapenv:Envelope>

但WS实际需要的是这样一个XML:

^{pr2}$

作为<contentFile>的值,一个基于base64编码的zip文件,包含一个XML文件。WS文档特别要求将此字段编码为如下所示:

-用真实的数据构造一个XML结构。 -把它放进拉链里 -将.zip编码为base64格式 -最后将其附加到XML中

到目前为止,我已经把定制的XML发送到WS。如果我使用SoapUI,它会正常工作,因为它检测到我在base64编码的zip中输入的无效值(它返回一个映射错误,说“invalid value”)。但是如果我尝试使用Python来使用它,我会从那个WS得到一条错误消息,它没有映射到WS-provider给出的错误列表上。在

这是我的密码。我读了Zeep文档,也向Python的不和谐寻求帮助。在

from zeep import Client, Settings
from zeep.wsse.username import UsernameToken

import base64

with open("20100066603-01-F001-1.zip", "rb") as f:
    bytes = f.read()
    encoded = base64.b64encode(bytes)


settings = Settings(strict=False, xml_huge_tree=True)
wsdl = 'https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService?wsdl'
client = Client(wsdl=wsdl, wsse=UsernameToken('20100066603MODDATOS', 'moddatos'), settings=settings)

node = client.create_message(client.service.sendBill('20100066603-01-F001-1.zip', encoded))

# response = client.service.sendBill('20100066603-01-F001-1.zip', b'bytes')
# print(client.service.sendBill('20100066603-01-F001-1.zip', b'encoded'))
# print(client.service.sendBill('20100066603-01-F001-1.zip', encoded))
# print(encoded.decode())
print(node)

我想知道我在python上所做的是不是正确的。我想得到WS在发送测试数据时将提供的XML响应。(我的目标是获得与在SoapUI中发送请求时相同的错误消息)我决定使用Zeep的原因是因为它是我能找到的针对SOAP请求的最完善的文档库。正如我之前所说,我是python的新手,我真的需要使用这个WS。如果这是一个重复的问题,请让我知道。或者如果这个问题可以用其他回答的问题来回答,请将我与他们联系起来。在做一些关于Zeep的研究时,我注意到有人说Zeep不喜欢附件(它对附件的支持不好)。我想知道如果我可以用另一个图书馆。如果是的话,请给我举个例子好吗?如果没有,你能给我推荐另一种编程语言和它的库吗这个。这个是我在StackO上的第一个问题。顺便说一句,不要担心pyhthon代码上的usernameToken数据,那是虚构的数据。 我用请求库做了一个请求,得到了一个XML,上面说有一个服务器内部错误。但我只是问了一下提供商,他们的WS功能正常。我可以通过使用SoapUI执行一个请求并得到预期的错误来确认这一点。抱歉,如果时间太长了。提前谢谢。Jajdp公司


Tags: client编码ws错误servicexmlzipwsdl
1条回答
网友
1楼 · 发布于 2024-10-02 04:25:56

谁会想到用于向soapws发送数据的库通常会自动在base64上对文件进行编码。 我做的所有代码都是正确的,只有一部分。而不是:

node = client.create_message(client.service.sendBill('20100066603-01-F001-1.zip', encoded))

应该是的

^{pr2}$

现在脚本可以正常工作了!在

相关问题 更多 >

    热门问题