Python 使用Zeep向SOAP服务发送原始XML请求(尝试复制参数)
我能够用Zeep发送一个简单的SOAP请求Python 使用Zeep向SOAP服务发送原始XML请求(尝试复制参数),python,soap,zeep,Python,Soap,Zeep,我能够用Zeep发送一个简单的SOAP请求 with client.settings(strict=False): resp = client.service.demandeFicheProduit( demandeur=self.xxx, motDePasse=self.yyy, ean13s="foo", multiple=False) 但是,我需要多次给出ean13s参数,这在Python函数
with client.settings(strict=False):
resp = client.service.demandeFicheProduit(
demandeur=self.xxx, motDePasse=self.yyy,
ean13s="foo",
multiple=False)
但是,我需要多次给出ean13s
参数,这在Python函数调用中是不可能的,所以我想我需要自己构建XML
打开Zeep的调试后,我看到发送的XML如下所示:
<?xml version='1.0' encoding='utf-8'?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Body>
<ns0:demandeFicheProduit xmlns:ns0="http://fel.ws.accelya.com/">
<demandeur>xxx
</demandeur>
<motDePasse>yyy
</motDePasse>
<ean13s>foo
</ean13s>
<multiple>false
</multiple>
</ns0:demandeFicheProduit>
</soap-env:Body>
</soap-env:Envelope>
我尝试了一种post_raw_xml
方法,但没有etree_to_string
:
def post_raw_xml(self, address, raw_envelope, headers):
return self.post(address, raw_envelope, headers)
我用上面的XML来命名它
transport = zeep.Transport()
transport.post_raw_xml("adress", my_xml, {}) # {}: headers?
响应状态为OK(200),但服务会回答无效请求
是否有我没有注意到的XML/SOAP复杂性?编码?标题?(此处{}
)
编辑:在对Zeep内部进行多一点监视之后,它发送的头将被删除
{'SOAPAction': '""', 'Content-Type': 'text/xml; charset=utf-8'}
所以我想我可以简单地使用requests.post
,但没有用。要使用请求
,请参阅
如何以其他方式手动构建XML
关于如何复制eans13
参数,还有什么想法吗
谢谢。我没有Zeep就解决了我的问题 我发送带有
请求的原始XML字符串,我不使用lxml或xsd手动构造XML
帮助我的是打印调试Zeep的transport.py/post
方法的内部(因此标题是{'SOAPAction':'“”,'Content Type':'text/xml;charset=utf-8'}
)
其他问题:要发送post请求,请执行以下操作:
requests.post(url, data=xml, headers=headers)
注意XML字符串(是的,结束标记后有一个换行符)
缺点是要重新解析XML。您好,您能给出一个例子吗?您好,我不能给出一个连接到Web服务的可复制示例,因为它需要用户名和密码。我尽量做到精确,作为补偿。没有wsdl url,Zeep xml请求可能吗?
{'SOAPAction': '""', 'Content-Type': 'text/xml; charset=utf-8'}
requests.post(url, data=xml, headers=headers)