在过去的几周里,我一直在学习Python,并尝试将自定义XML发送到公共测试WS . 现在我觉得我没有取得任何进展 . 所以我现在需要帮助或任何建议 .
如果你使用SoapUI或其他方法(我试过-mzeep)对它进行分析,Soap ws会询问以下代码 .
但WS实际需要的是这样的XML:
xmlns:ser="http://service.sunat.gob.pe" xmlns:wsse="http://docs.oasisopen.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
作为 上的值,一个在base64上编码的zip文件,包含一个XML文件 . WS文档特别要求将此字段编码为:
使用真实数据制作XML结构 . - 将它放入.zip -encode中.zip为base64格式 - 最后将其附加到XML中
到目前为止,我直到将自定义XML发送到WS . 如果我使用SoapUI这样做,它会正常工作,因为它检测到我在base64上编码的zip中的XML中放入的无效值(它返回一个映射错误,说“无效值”) . 但是,如果我尝试使用Python来使用它,我会从WS中获取错误消息,而这些消息并未映射到WS提供程序提供的错误列表中 .
这是我的代码 . 我曾经阅读过Zeep文档,并在Python的Discord上向人们寻求帮助 .
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上的第一个问题 . BTW不要担心pyhthon代码上的usernameToken数据,这是虚构的数据 . 我使用Requests库做了一个请求,得到了一个XML,说服务器内部有错误 . 但我只是询问提供商,他们的WS正常运行 . 我可以通过使用SoapUI执行请求并获得我期望的错误来确认这一点 . 对不起,如果它很长 . 提前致谢 . Jajdp