在过去的几个星期里,我一直在学习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公司
谁会想到用于向soapws发送数据的库通常会自动在base64上对文件进行编码。 我做的所有代码都是正确的,只有一部分。而不是:
应该是的
^{pr2}$现在脚本可以正常工作了!在
相关问题 更多 >
编程相关推荐